unity in app purchase (iap)の使い方

36
Unity InAppPurchase を組み込んでみよう

Upload: makoto-ito

Post on 06-Jan-2017

2.868 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Unity In App Purchase (IAP)の使い方

Unity InAppPurchase を組み込んでみよう

Page 2: Unity In App Purchase (IAP)の使い方

Unity In-App Purchase (IAP) とは

• Unity Analytics に付属する機能

• アプリ内課金を簡単に組み込める

• マルチプラットフォーム • Google Play / iOS App Store / Mac

App Store / Windows Store / その他

• コード共通

• ネイティブプラグインを書かなくてOK

Page 3: Unity In App Purchase (IAP)の使い方

IAPをサンプルプロジェクトに組み込んでみよう

• 仕様 • クマは購入したら利用できるようにする • 一度購入したらそれ以降は利用できる(非消費型)

• 購入するまでは利用不可

• コインは購入可能

• 買うとプレイが終わっても存続する(消費型)

• 実装方法 • クマ利用権やコインはPlayerPrefs で記録しておく

Page 4: Unity In App Purchase (IAP)の使い方

Let’s try Unity IAP!

Page 5: Unity In App Purchase (IAP)の使い方

IAPをセットアップする

①In-App Purchase を有効にする②オンにして、Importする③Plugins/UnityPurchasingが

あればOK

Page 6: Unity In App Purchase (IAP)の使い方

購入ボタンと購入APIを紐づける

①Systemを選択→右クリック→

Create Emptyで空オブジェクト。

名前を「IAPManager」に変更

②IAPManager に

Example/Scripts/Workshop/Purchaser.cs

(Example/Scripts/Complete/Purchaser.csではない)

をD&D

③シーンの中で”border_shop”を検索して

アクティブにして見えるようにする

Page 7: Unity In App Purchase (IAP)の使い方

購入ボタンと購入APIを紐づける

④シーンの中で”Item1buy_Button”を検索

Buttonコンポーネントにある

OnClickの+を押して項目追加。

⑤検索ウィンドウの×で検索解除

④で作った項目に①で作った

IAPManager をD&D

⑥No Function をクリックして

Purchase ▶︎ BuyConsumable()

を選択

Page 8: Unity In App Purchase (IAP)の使い方

購入ボタンと購入APIを紐づける

⑦シーンの中で”Item2buy_Button”を検索

Buttonコンポーネントにある

OnClickの+を押して項目追加。

⑧検索ウィンドウの×で検索解除

⑦で作った項目に①で作った

IAPManager をD&D

⑨No Function をクリックして

Purchase ▶︎ BuyNonConsumable()

を選択

Page 9: Unity In App Purchase (IAP)の使い方

購入ボタンと購入APIを紐づける

⑩シーンの中で”border_shop”を検索して

非アクティブに戻す

Page 10: Unity In App Purchase (IAP)の使い方

Purchase.csの購入部分に効果を組み込もう

• Example/Scripts/Workshop/Purchase.cs を開く

• Example/Scripts/CompleteProject/Purchase.csを参考に

• 最初の// TODO:のところに 以下を入れる(コピペ可)

• 次の// TODO: のところに 以下を入れる(コピペ可)

PlayerPrefs.SetInt("CoinNum", PlayerPrefs.GetInt("CoinNum") + 100); GameObject.Find(“CoinNumUI"). GetComponent<ScoreManager>().UpdateCoin();

PlayerPrefs.SetInt("NewCharaUnlocked", 1);

Page 11: Unity In App Purchase (IAP)の使い方

CharaSelector.csに効果を反映させよう

• 購入したキャラを利用可能・不可を設定する

• Example/Scripts/Workshop/CharaSelector.cs を開く

• Example/Scripts/CompleteProject/CharaSelector.csを参考に

• 最初の// TODO:のところに 以下を入れる(コピペ可) if (PlayerPrefs.GetInt("NewCharaUnlocked") == 0) { newOneButton.interactable = false; } else{ newOneButton.interactable = true; }

Page 12: Unity In App Purchase (IAP)の使い方

Unity IAPの課金プロセスを紐解く

Page 13: Unity In App Purchase (IAP)の使い方

課金部分Purchase.cs を紐解く

• InitializePurchasing • Awakeで自動で行われ、各ストアでの商品IDと共通商品IDを紐付けを行っている。

• ストアが違ってもゲーム内商品が同じであれば、同じIDの方が混乱がなくていい。

• BuyConsumable、BuyNonConsumable、BuySubscription • ストア別に購入アイテムを別にしたりしていないことに注目

• BuyProductID • try~catch で購入シーケンスでの例外をキャッチ

• m_StoreController.InitiatePurchase で、デバイスの購入ダイアログに飛ぶ

Page 14: Unity In App Purchase (IAP)の使い方

課金部分Purchase.cs を紐解く

• RestorePurchases • アプリを再インストールした際に、昔買った商品をリストアする処理

• AppStore は明示的にアプリ側で復活させる必要がある

• OnInitialized • 初期化がうまくいけば勝手に呼び出される関数

• 全体の購入システム(m_StoreController) と、ストア特有のサブシステム(m_StoreExtensionProvider) のインスタンス化

• ProcessPurchase • ストアで課金が完了した段階で、課金によるゲームへの効果を処理するところ

Page 15: Unity In App Purchase (IAP)の使い方

AppStore の課金アイテムを 実際に追加してみよう

Page 16: Unity In App Purchase (IAP)の使い方

AppStore に課金アイテムを登録

①iTunes Connect へ行って

新しいAppを作る②Bundle IDはCloud Buildの

�際に、作ったものを代入。

�その他の項目は適当に

③今作った新しいアプリを選択し、

機能→App 内課金→+を選択。

Page 17: Unity In App Purchase (IAP)の使い方

AppStore に課金アイテムを登録

④消費型を選択 ⑤参照名は公開されないので適当に

�製品IDは逆ドメイン名でユニークID。

�(例:com.warapuri.unitychanrollball.coin100)

⑥ 価格も設定

com.warapuri.unitychanrollball.coin100

Page 18: Unity In App Purchase (IAP)の使い方

AppStore に課金アイテムを登録

⑧スクリーンショットを選択。

�配布USBに「Shop.png」が

�あるので、利用してください

⑦言語を追加を設定。課金ポップアップで

�表示される内容なので、慎重に。

⑨Saveを押して保存すると、

�登録される

Page 19: Unity In App Purchase (IAP)の使い方

Sandboxで試してみる

①ユーザーと役割→Sandboxテスター

�→テスター+ボタンでテスターを追加

②テスターとして登録

[email protected]

�という感じで「+」を使うと無駄に

�メールアカウント作らなくて便利

③テストするiOS端末で

�設定→iTunes & App Store

�→Apple IDを選択し、

�一旦サインアウトする

Page 20: Unity In App Purchase (IAP)の使い方

Sandboxで試してみる

⑤アプリを立ち上げて、

�iOS端末で購入しようとすると、

�[Environment: Sandbox]

�と表示されていれば成功

④Purchase.cs の kProductNameAppleConsumable の文字列部分を

�先ほどの製品IDに変更する

“com.warapuri.unitychanrollball.coin100”;

Page 21: Unity In App Purchase (IAP)の使い方

Google Play の課金アイテムを 実際に追加してみよう

Page 22: Unity In App Purchase (IAP)の使い方

②タイトルを適当に入れて

�APKをアップロードを選択

①Google Play で

���アイコン→

�新しいアプリを追加

③アルファ版テストを選択

�APKファイルをアップロードを選択

�(Cloud Buildの際に作ったAPK)

Google Play で新しいアプリを登録 APK

Page 23: Unity In App Purchase (IAP)の使い方

④「クローズドアルファテスト」を

�選択

⑤Create List でテスターリストの作成

�リスト名は適当に。

�メールアドレスは自分の

�Google アカウントを入れてください

⑥作ったテスターリストに

�有効に✔を入れる

Google Play で新しいアプリを登録 APK

Page 24: Unity In App Purchase (IAP)の使い方

Google Play で新しいアプリを登録 ストアの掲載情報

②簡単な説明と詳細な説明をそこそこちゃんと記載する。

�(適当に書いたらなりすましに誤認されました)

①ストアの掲載情報を選択

Page 25: Unity In App Purchase (IAP)の使い方

③配布したUSBの中に「IAP」フォルダの中に画像を利用

�スナップショットに2枚以上、

�高解像度アイコン、宣伝用画像をそれぞれ上記のようにD&D

�アップロード

④アプリのタイプをゲーム。

�カテゴリをアーケード。

�コンテンツレーティングを全ユーザー対象

�プライバシーポリシーは「今回は〜」に✔

Google Play で新しいアプリを登録 ストアの掲載情報

Page 26: Unity In App Purchase (IAP)の使い方

Google Play で新しいアプリを登録 コンテンツのレーティング

①コンテンツのレーティングを選択 ②画面に従ってレーティングを設定

Page 27: Unity In App Purchase (IAP)の使い方

Google Play で新しいアプリを登録 価格と販売/配布地域

①価格と販売/配布地域を選択 ②アプリの価格は無料。

�全ての国を選択。

③同意事項に全て✔

�一番上の「ドラフトを保存」をクリック

Page 28: Unity In App Purchase (IAP)の使い方

Google Play で新しいアプリを登録 アプリ内アイテム

①アプリ内アイテムを選択

�+新しいアイテムを追加を選択

②管理対象のアイテムを選択

�アイテムIDには逆ドメイン

�(アイテムIDは後ほど使うので忘れずに)

�次へを選択�

③タイトル、説明は公開される情報なので

�ちゃんと記入。

�デフォルトの価格を記入後、価格を

�自動換算ボタンで各国の値段を算出。

�最後に右上の「無効」を「有効」に

com.warapuri.unitychanrollball.coin100

Page 29: Unity In App Purchase (IAP)の使い方

⑤アプリを立ち上げて、

�Android端末で購入しようとすると、

�「これはテスト用の注文です」

�と表示されていれば成功

④Purchase.cs の kProductNameGooglePlayConsumable の文字列部分を

�先ほどのアイテムIDに変更する

Google Play で新しいアプリを登録 アプリ内アイテム

“com.warapuri.unitychanrollball.coin100”;

Page 30: Unity In App Purchase (IAP)の使い方

右のようなエラーが出ている場合の考えられる原因 1) アイテム内アイテムを「有効」にしていない

2) アイテムIDが違う

3) テスターとGoogle Playアカウントが違う

対処法:設定→アプリ→Google Playストア→ストレージ→データ消去

4) 反映されるまで時間がまだ立っていない

トラブルシューティング

Page 31: Unity In App Purchase (IAP)の使い方

それでもエラーが治らない場合 1) アプリのステータスが「公開中」まで待つ

2) USBからインストールではなく、APKアップロード→Google Playからダウンロードで試してみる

3) Androidデバイスを再起動してみる

4) 一回寝て、翌日もう一回チャレンジする

トラブルシューティング

Page 32: Unity In App Purchase (IAP)の使い方

注意

• PlayerPrefsで商品の反映をさせていたが、本来はNG • 簡単に改造されてしまう

• サーバー側で管理しローカル側では一切情報を保持しない

Page 33: Unity In App Purchase (IAP)の使い方

IAP、もう少し深く。

Page 34: Unity In App Purchase (IAP)の使い方

レシート検証

• http://docs.unity3d.com/ja/current/Manual/UnityIAPValidatingReceipts.html

• 購入時にストアからくるレシートデータをローカルで確認する • Google Play 公開キー(要設定)

• Apple のルート証明書(自動設定)

• 購入後のシーケンスなので、アプリケーション側でUIでユーザーに知らせる必要がある

Page 35: Unity In App Purchase (IAP)の使い方

レシート検証

①Window→Unity IAP→

�Receipt Validation Obfuscatorを

�選択して、「IAP Obfuscator」を

�表示

②Google Play Developer Consoleで

�サービスとAPIを選択し、

�「このアプリのライセンス キー」の

�部分を丸々コピーする

③「IAP Obfuscator」の項目に

�ペーストして、Generate IAP〜を

�クリックして、コード生成する。

Page 36: Unity In App Purchase (IAP)の使い方

レシート検証public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e){ // Unity IAP's validation logic is only included on these platforms.#if UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX // Prepare the validator with the secrets we prepared in the Editor // obfuscation window. var validator = new CrossPlatformValidator(GooglePlayTangle.Data(), AppleTangle.Data(), Application.bundleIdentifier);

try { // On Google Play, result will have a single product Id. // On Apple stores receipts contain multiple products. var result = validator.Validate(e.purchasedProduct.receipt); Debug.Log("Receipt is valid. Contents:"); foreach (IPurchaseReceipt productReceipt in result) { Debug.Log(productReceipt.productID); Debug.Log(productReceipt.purchaseDate); Debug.Log(productReceipt.transactionID); } // Unlock the appropriate content here. } catch (IAPSecurityException) { Debug.Log("Invalid receipt, not unlocking content"); }#endif

return PurchaseProcessingResult.Complete;}

マルチプラットフォーム用確認クラス

レシート確認

問題なければ、ここで購入したことに問題があればここで、買えないことをユーザーに知らせる必要がある