ココのコイン落としの課金処理実装のために、Simple IAP Systemというアセットを使っています。
実装はまだ進んでいませんが、とても良いアセットのようなので、このアセットがもっと広まるように、アセットページのDescriptionと、マニュアルの(Google翻訳を駆使した)日本語訳を掲載しておきます。
Description
Simple IAP System(SIS)は、アプリ内購入の管理を簡素化します。あなたのユーザーの店舗在庫を維持しながら、リアルマネーまたは仮想通貨でアプリ内アイテムを販売したい場合は、私達がお手伝いします!
Webプレーヤー|ビデオチュートリアル
興味がある? Unityフォーラムで質問してください。
サポートをお探しですか?サポートフォーラムにアクセスしてください。
HOT:Steam、Facebook、PayPal、Oculus(Rift&GearVR)プラットフォームのサポート。サポートされているすべてのストアのプラットフォームマトリックスのスクリーンショットをご覧ください。
特徴:
*使いやすいIAP設定エディター
*リアルマネーと仮想通貨の購入
*動的なショップレイアウトとショップテンプレート
* Unity UIの統合
*ストアからのローカライズされたオンラインアイテムデータ
*アイテム選択モード(選択/選択解除)
*プレーヤーの進行状況に基づいてロックされたアイテム
* IAPデータとカスタムデータのローカルストレージ
*クライアント側の領収書の検証
* Oculusのバーチャルリアリティのサンプルシーン
(オプション)PlayFabを使用する場合の機能:
*通貨およびIAP製品のクラウド保存
*仮想製品をリモートで更新する
*サーバー側の領収書の検証
入門
ビデオチュートリアルについては、YouTubeチャンネルにアクセスしてください。
1 [Window]> [Simple IAP System]> [Plugin Setup]の下にある請求プラグインセットアップウィンドウを開きます。
シンプルIAPシステムを新しいプロジェクトにインポートした場合、すべてのUnity IAPステータスチェックはNOT OKと表示されます。
ユーザーに課金したくない場合はUnity IAPを有効にする必要はなく、ゲーム内で獲得したコインで剣を購入するなど、仮想製品と通貨のみが必要であることに注意してください。ただし、リアルマネーで仮想商品を販売する場合は、Unity IAPを有効にする必要があります。
2 この公式ページに記載されているように[サービス]タブでUnity IAPを有効にしてインポートします。
Unity 2018以降:Unity IAPは[Window]> [Package Manager]にPurchasing packageを持っています。それも同じ様にインポートすると、「Unity IAP Status」の下のすべてのUnity IAPチェックにOKが表示されます。
3「Activate Unity IAP」を切り替えることで、選択したプラットフォームでUnity IAPを使用するようシンプルIAPシステムに指示します。
請求プラットフォームを除外することにより、これにより、たとえば AndroidではなくiOSでのリアルマネーのアプリ内購入を許可させることに留意して下さい。
完了したら、[適用]を押します。
4 SimpleIAPSystem> Prefabs> Resourcesから“ IAPManager”プレハブをゲームの最初のシーンにドラッグします。
Simple IAP System(IAPマネージャーはすでにそこにあります)のサンプルシーンを実行する場合は、「AllSelection」シーンから開始します。
5 オプション:プラグインセットアップウィンドウでPlayFabサービス(アプリ内購入、仮想通貨、プレーヤーデータのクラウド保存など)の使用を有効にする場合は、「PlayfabManager」プレハブをSimpleIAPSystem> Prefabs> Resourcesからあなたのゲームの最初のシーンに同じ様にドラッグします。
6 「ShopManager」プレハブをSIS>プレハブから、アプリ内購入を表示するシーン(あなた独自のショップシーン、または付属のテンプレートの1つを使用)にドラッグします。
追加請求ドキュメント:Unityでリアルマネーのアプリ内アイテムをリンクする前に、まずApp Store(Google Play、iTunes Connectなど)でそれらを作成する必要があります。 アプリ内購入を初めてご利用になる場合は、フォーラムにあるストア固有のガイドをご覧になり、App Storeでの設定を成功させてください。
2 Unityでアプリ内アイテムを作成する
Unityでは、IAP設定エディターは、リアルマネーについてであれ仮想マネーについてであれ、IAPを管理するための主要な場所です。
[Window]> [Simple IAP System]> [IAP Settings]に移動して開きます。
Virtual Currencies:ここでは、仮想通貨とその開始金額を定義できます。これは、アプリで他の仮想製品を購入するために使用できます。
In App Purchases:アプリ内アイテムのカテゴリを指定します。 各カテゴリには、In App Purchases(識別子はApp Store識別子と一致する必要があります)、Virtual Currency packs(仮想通貨の金額を自動的に付与する)、または仮想エコノミー製品(アプリにだけ存在する仮想製品)。
これらは、エディターで定義する必要がある製品変数です。
•Group:製品を追加するグループの一意の名前
•Identifier:一意のプロダクト識別子
•Icon:アイコンとして使用するスプライトテクスチャ
•Type:請求モデルのプロダクトタイプ
•Consumables:リアルマネー/通貨のために、複数回購入できます(例:コイン)
•Non-consumables:リアルマネー/通貨の1回の購入(ボーナスコンテンツなど)
•Subscriptions:リアルマネーで定期的にプレーヤーに請求します(サービスベースのコンテンツなど)。
•Title、Description:ショップの商品の説明テキスト
•Price:プロダクト価格(リアルマネーの文字列値、仮想通貨の整数値)。 仮想プロダクトは、価格がゼロの場合、事前購入されたものとして開始されます。
•Cost/Earnings:仮想経済プロダクトのプロダクト価格(コスト)、または仮想通貨パック(収益)の購入に対して自動的に付与される仮想通貨の量。
•Usage:消耗品を購入する場合、これは追加する必要がある量です。
現在の金額には、DBManager.GetPlayerData(プロダクト識別子)からアクセスできます。
デフォルトは1です。これを0に設定すると、すぐに消費されたものとして扱われるため、何も保存されません。例:選択のための特別な弾丸:量> 0、ゲーム内で購入した一時的なパワーアップ:量= 0。
•Fetch:ローカル商品データを、取得したApp Storeデータで上書きするかどうか(リアルマネー商品にのみ適用)。また、PlayFabを使用すると、仮想商品データがPlayFabダッシュボードからも取得されます。
•R:要件ウィンドウを開きます。ユーザーが最初に製品のロックを解除するには、この要件を満たす必要があります。詳細については、「IAP Itemのプレハブのカスタマイズ」セクションを参照してください。
プラットフォームのオーバーライド
複数のApp Storeに展開していて、同じ製品に異なる識別子がある場合は、それらを何らかの方法で「マージ」する方法が必要です。これがプラットフォームのオーバーライドの目的です。それらは、横にある折り畳みを展開することによって、リアルマネーIAPプロダクトに対してのみ定義できます。この例では、製品識別子がGoogle PlayとAmazonを除くすべてのApp Storeで「コイン」である場合、プラットフォームオーバーライドセクションに追加することでそれらをオーバーライドできます。
いくつかの技術的前提条件:
•仮想プロダクトの場合、最初に使用する必要がある1つ以上の仮想通貨を指定する必要があります。本番環境で通貨の名前を変更/削除することはお勧めしません。これにより、矛盾や資金の損失につながる可能性があります。
•IAP Managerのプレハブは常にResourcesフォルダーに置いてください。 IAP設定エディターを変更すると、これらの変更は自動的にプレハブに保存されます。したがって、SISの新しいバージョンにアップグレードする場合は、必ずIAPマネージャープレハブのローカルコピーを保持してください(インポート時にIAPManagerプレハブおよびIAPListenerスクリプトのチェックを外します)。
•アプリでリアルマネー購入を復元するには、ショップのどこかにUIボタンを追加し、それにUIButtonRestoreコンポーネントをアタッチするだけです。サポートされているプラットフォームでは、内部的にこれは識別子「restore」の製品を購入します。 IAPマネージャはこれを認識し、サポートされているプラットフォームで適切な復元メソッドを呼び出します。復元ボタンを提供しない場合、Appleはアプリを拒否する事を留意してください。トランザクションを復元する必要がないプラットフォームでは、コンポーネントは自動的に無効になります。これは、すべてのサンプルシーンで陳列されています。または、識別子が「restore」の消耗品IAP製品を追加することもできます。
3ショップでの製品のインスタンス化
ショップシーンのShop Managerプレハブがすべての作業を行います。それを見てみましょう。
サンプルショップシーンの1つを開いてください。例: SimpleIAPSystem>Scenes>Vertical
IAP Settingエディタのグループごとに、インスタンス化したいプロダクトの視覚的表現(プレハブ)と場所(コンテナー)を定義するだけで済みます。 [SimpleIAPSystem]> [Prefabs]> [Vertical / Horizontal]フォルダーにあるいくつかの定義済みのIAP Itemのプレハブから選択できます。シーンを再生すると、Shop Managerが各アイテムに対してこのプレハブをインスタンス化し、コンテナーにペアレント化します。UnityのGridLayoutGroupコンポーネントがそれらをシーンにうまく配置します。
シーン内のコンテナーのtransformには、IAPContainerコンポーネントをアタッチする必要があります。
プロダクトをシーン内のアイテムとしてインスタンス化した後、Shop Managerはそれを確実に正しい状態に設定します。これは、購入した製品のショップアイテムに[購入]ボタンが表示されなくなったか、装備されたアイテムに再び選択を解除するボタンが表示されることを意味します。
ShopManagerはPublic変数として、購入が成功または失敗した場合にフィードバックウィンドウを表示するために使用されているゲームオブジェクトとUIテキストへの参照を公開します。
4 IAPアイテムのプレハブのカスタマイズ
前の章で述べたように、IAP Itemプレハブは、実行時にショップ内のIAPプロダクトを視覚化します。 これらのプレハブにはIAPItemコンポーネントがアタッチされており、アイテムのすべての重要な側面への参照があります、例えば記述的なラベル、購入ボタン、アイコンテクスチャなど。 IAP Itemは、製品の状態に基づいて、プレハブインスタンスのさまざまな部分を表示または非表示にします。
Shop Itemには、以前のユーザーの操作に応じて、いくつかの異なる状態があります。
アイテムの可能な状態は、IAP Itemコンポーネントへの参照を割り当てることによって指定されます。
•Default:アイテムには少なくとも説明的なラベル(タイトル/説明、価格)と購入ボタンが必要です
•Purchased:ゲームオブジェクトを、販売済みプロダクト上でアクティベートされる「Sold」スロットに割り当てます。
•Single Select:「Select Button」を割り当て、「Deselect Button」は空のままにします
•Multi Select:「Select Button」と「Deselect Button」の両方を割り当てます
•Locked:購入ボタンや記述的ラベルなどを無効にし、「Locked Label」と「Hide On Unlock」ゲームオブジェクトを表示して、まずロック状態のプレハブを準備します。 アイテムのロックが解除されると、「Hide On Unlock」が非表示になり、代わりに「Show On Unlock」が表示されます。
<Requirementウィンドウ>
これは、IAP Settingエディターで定義されているjetpack製品の要件です。 ラベルにカーソルを合わせると、その意味がわかります。 たとえば、プレーヤーがレベル1に達した場合、ここではジェットパックのロックを解除します。
vertical/horizontal menuシーンは、Custom サブメニューでこのプロダクトを陳列しています。
アップグレード(1つの製品についての複数のレベル)もここで指定できます。 このプロダクトの後にくるプロダクトのIDを入力するだけで、ユーザーが購入したショップアイテムが次のレベルに置き換えられます。 アップグレードはシーンでインスタンス化する必要がないので、アップグレード用のプレハブとコンテナのスロットを空のままにすることができます。 「Speed」プロダクトはこのサンプルであり、「Items」セクションで陳列されています。
5 プログラミングとIAPコールバック
以下のような、ほとんどのプログラミングはあなたの為に内部ですでに処理されている事に留意してください。
•購入後、非消耗品/サブスクリプション製品を「Purchased」に設定する
•「Currency」プロダクトを購入した後に仮想通貨を付与する(IAP Settingsエディター経由)
•消耗品プロダクトのカスタム使用量の追加(IAP Settingsエディターを使用)
•仮想製品の購入などで通貨を差し引く。など
ユーザーに素敵なフィードバックウィンドウを表示したい場合は、IAPListenerに追加します(テキストを自分で定義できるため)。 IAPListenerスクリプトにはHandleSuccessfulPurchaseメソッドがあります。これは、ユーザーが製品を購入したときに、グローバルな識別子(プラットフォームのオーバーライドではない)をそれに追加することによって何が起こるかを示す場所です。
以下は、ゲームの任意の時点でプログラミングを使用して実行できるいくつかの例です。すべてのコードスニペットは、提案されたスクリプトの場所とともにリストされている例です。
IAPListenerスクリプトで:
ShowMessage(“1000 coins were added to your balance!”); //カスタムテキストのフィードバックを表示させる
レベルスタート時:
if(DBManager.GetPurchase(“no_ads”) == 0) //製品が購入されているかどうかを確認する、または
if(DBManager.isPurchased(“no_ads”)) //上記の確認の省略形
ゲーム中:
DBManager.GetPlayerData(“bullets”).AsInt; //仮想プロダクトの残量を返します
DBManager.IncreasePlayerData(“bullets”, -10); //仮想プロダクトの量を10減らす
レベル終了時:
DBManager.SetPlayerData(“score”, new SimpleJSON.JSONData(2250)); //ハイスコアを保存
DBManager.IncreasePlayerData(“xp”, 100); //現在の経験値を100増やします
DBManager.IncreaseFunds(“coins”, 200); //ユーザの仮想通貨を200増やします
おそらく、いくつかのメソッドがDBManagerを使用していることに気づいたでしょう。 DBManagerは、PlayerPrefsデータベースを管理し、購入、選択、仮想通貨、およびその他のプレーヤー関連データを追跡します。 基本的に、アプリ内購入またはプレーヤーに関連するカスタムデータを変更する場合は常に、DBManagerのメソッドを呼び出す必要があります。 using SIS;をあなた自身のスクリプトの一番上に追加することにより名前空間を含めることを忘れないでください。 利用可能なメソッドの完全なリストについては、スクリプトリファレンスをご覧ください。
6 デバイスストレージの暗号化
オプションで、デバイスでDBManagerによって作成された値を暗号化できます。 IAPManagerプレハブインスペクターで、「暗号化」を有効にします。また、「obfuscKey」を独自の暗号化キーに置き換えることを忘れないでください(iOS / Androidでは8文字、Windows Phone 8では16文字)。他の手法の方が安全ですが、多くのApp Storeでは、これらの標準でアプリを送信するときに暗号化登録番号(ERN)が必要です。この手法ではERNは必要ありません。アプリをAppleのApp Storeに送信しようとしているときに、アプリに暗号化が含まれているかどうかを確認するメッセージが表示された場合は、[はい]をクリックします。アプリが適用免除の対象かどうかを尋ねられたら、もう一度[はい]をクリックすると完了です。
Simple IAP SystemデータベースはUnityのPlayerPrefsに保存されているため、レジストリファイルで確認できます。ただし、実際にはもっと簡単な方法があります。Unityエディターで、Window>Simple IAP System>Show Databaseの下にあるデータベース表示ウィンドウを開くと、コンピューターに現在保存されている内容を確認できます。
レジストリでは、暗号化されていないデータと暗号化されたデータは次のようになります。
IAPテスト間でエントリをクリーンアップすることをお勧めします。Window>Simple IAP System>Clear Databaseを開いてデータベースをクリアし、SISによってアプリ固有のデータセットをすべて削除します。
警告:PlayerPrefsデータベースの実装(DB Manager)では、一度だけの変数の設定が必要になる場合があることに注意してください。 製造(ライブ)バージョンでそれらの値を再度変更する場合は、アプリの既存のユーザーに独自のデータ引き継ぎを実装する必要があります。 そうしないと、データが失われる可能性があり、顧客に不満をもたらします。 例:
➢IAPエディターで仮想通貨の名前を変更または削除する
➢IAPエディターでIAPの名前を変更または削除する
➢DB Managerの内部ストレージパスの名前を変更する
➢DB Managerの暗号化オプションを切り替える
Rebound Gamesは、Simple IAP Systemの使用に起因または関連して発生した使用、データ、または利益の損失に起因するいかなる損害についても責任を負いません。
7 ショップテンプレートの説明
ユニークなデザインのために、独自の画像をインポートし、ゲームのスタイルに合わせてショップシーンとIAPアイテムのプレハブを構築することを強くお勧めします。これにより、コンバージョン率が大幅に向上します。
•List(シーンの例「Vertical」/「Horizontal」):これらはSISの最も基本的なサンプルであり、実際のお金のための製品のみが含まれ、ゲーム内のコンテンツや通貨は含まれていません。これらには、ScrollRectsを含む「Window – IAP」ゲームオブジェクト、その上containerにアタッチされたIAPContainerコンポーネントがあります。
IAPContainerは、さまざまなデバイスのアスペクト比と解像度、およびシーン内のIAP Itemプレハブの幅と高さに従って、GridLayoutGroupのセルサイズを動的に調整します。 IAPContainerでは、解像度が高い場合にアイテムの最大の幅/高さを設定することもできます。
•Tabs(シーンの例 ‘VerticalTabs’ / ’HorizontalTabs’):単一のScrollRectでは不十分な場合、複数ある場合があります!これらのシーンには、ゲーム内のコンテンツ製品や通貨も含まれています。各カテゴリにはシーン内に個別のウィンドウがあり、左側の対応するボタンがトリガーされるとアクティブになります。たとえば、アイテムのボタンは「Window – Items」を有効にしますが、他のすべてを無効にします。これらのシーンでは、Textコンポーネントに接続されている「UpdateFunds」スクリプトを使用して、上部に「Coins」通貨の金額も表示されます。
•Menu(シーン「VerticalMenu」/「HorizontalMenu」の例):これらはSISで最も複雑なシーンであり、すべての製品タイプを陳列しています。ウィンドウを有効にする代わりに、ここではアニメーションされます。各ウィンドウには、画面内または画面外に移動するAnimatorコンポーネントがあります。たとえば、Itemsボタンをクリックすると、画面外の[Window-Main]がアニメーションされ、[Window-Items]が表示されます。
この動作は、ボタンに設定された2つのイベントを介して、ボタンごとに処理されます。
各ウィンドウの「Button – Back」は、まったく逆です。また、Customサブメニューの「Button – LevelUp」を押すと、ユーザーレベルが上がり、Shop Managerが新しいアイテムのロックを解除しようとします。
•VR(サンプルシーン「VerticalVR」):デフォルトのショップシーンは、2つの理由でバーチャルリアリティで機能しません。入力が通常のクリックまたはタッチではなく、UIキャンバスがワールドスペースにある必要があります。これが、SimpleIAPSystem> Prefabs> Verticalフォルダーに追加のショップアイテムプレハブ(IAPItemVR、IGCItem_SingleSelectVR)とともに、独立したVRショップシーンがある理由です。
Unityの公式VirtualRealilty Learn Projectのコンポーネントは、Oculusデバイスをサポートするために使用されています。このVRショップで使用されているメカニズムの概要を説明します:
•MainCameraには、レチクルと選択放射状にいくつかのVRスクリプトが添付されています
•ユーザーの確認が必要な各UIボタン(ショップアイテムの購入ボタンなど)には、VRInteractiveItemとBoxColliderコンポーネントがアタッチされています。これは、MainCameraのVREyeRaycasterスクリプトが実際にそれらを確認ボタンとして認識するためです。
•VRInteractiveItemには、インスペクターのさまざまなアクションにマップされたいくつかのUnityEventがあります
•VRでUIインタラクション(ホバー、クリック)を機能させるために、UnityがCanvasに接続するデフォルトのGraphicRaycasterは役に立ちません。当社のVRGraphicRaycasterは、UnityのソースのVR互換バージョンです。
追加の注意:Player Settingsで[Virtual Reality Supported]がオンになっていて、[AllSelection]シーンからアプリを起動している場合、VRショップシーンが自動的に読み込まれます。
8 領収書の確認
IAPを設定したら、アプリに余分のセキュリティのレイヤーを追加して、ハッカーがIAPクラッカーを使用してアイテムをロック解除したり、偽の購入を送信したり、ローカルデータベースストレージを上書きしたりするのを防ぐことができます。領収書の検証は、IAPの海賊行為との戦いに役立ちます。Simple IAP Systemを用いて、アプリ内で領収書検証を使用する方法についていくつかのオプションがあります。
クライアント側の領収書検証
このオプションでは、バンドルとApp Store developer keyを使用して、アプリによってレシートが作成されたことを確認します。このチェックをローカルで(クライアントのデバイス上で)実行すると、セキュリティ上の欠陥が生じますが、これは非常に高速なアプローチで、数回クリックするだけで著作権侵害を防止できます。
1. [Window]> [Unity IAP]> [Receipt Validation Obfuscator]でUnity IAPの難読化ツールを開きます
2. Google Store Keyを入力します(IAPManagerプレハブで入力したものと同じ)。
3. Obfuscateボタンを押すと、プロジェクトに追加の認証情報ファイルが作成されます。
4. IAPManagerプレハブを配置して、ReceiptValidatorClientコンポーネントを追加します。
5. ReceiptValidatorClientスクリプトを開いて、コメント解除行* / / *を削除します(そうしないと、以前に作成した難読化ファイルなしでスクリプトがエラーをスローするため、これが必要です)。
サーバー側の領収書検証
このオプションでは、レシートは外部サーバーに送信されます。外部サーバーはトランザクションデータをAppleまたはGoogleにそれぞれ転送し、それをチェックしてから、有効または無効な応答をアプリケーションに返します。つまり、検証部分はサーバー上でのみ発生します。また、サブスクリプションのステータスを確認し、期限切れのコンテンツを制限する場合は、オンラインの領収書確認を使用する必要があります。このオプションを使用するには、サーバーおよびiTunes / Google開発者アカウントでのいくつかの設定が必要です。これを設定するために必要な高度な設定と経験のため、このアセットの外部の追加パッケージとしてこれを提供しています。サポートフォーラムに登録して、アクセス権を得るための専用スレッドをご覧ください。
サービス領収書検証(PlayFabを使用する場合に必要)
このオプションは、レシートの検証にPlayFab API +サーバーを利用します。
したがって、このオプションを使用するには、アクティブなPlayFab開発者アカウントが必要です(無料枠で十分です)。
サーバー側と同じように、検証部分はユーザーの手に委ねられていません。領収書は購入時にサーバーに送信され、Apple、Google、またはAmazonとのトランザクションをそれぞれ検証しますが、それが一意であり、以前に使用されていないことも確認します。レシートは1回しか検証できないため、このオプションは、アクティブなサブスクリプションまたは期限切れのサブスクリプションの検証には適していません。これは、それらが重複として拒否されるためです。それでも、サブスクリプションを実装する予定がない場合は、クライアント側の検証よりも安全です。それを使用するには:
1. PlayFabの「Full Suite」または「Validation Only」がPlugin Setupウィンドウで設定されていることを確認します
2. ReceiptValidatorServiceコンポーネントをIAPManagerプレハブに追加します
PlayFabの検証ロジックはコスト面で最適化されていることに注意してください。PlayFabは、アプリを使用する月間アクティブユーザー(MAU)に基づいて、追加のAPI制限の請求を計算します。 「検証のみ」の実装では、PlayFabユーザーは実際にアプリ内購入を行ったときにのみ作成されるため(他には何もありません)、MAU数は可能な限り少なくなります。
9 連絡先
完全なソースコードが提供され、すべての行が十分に文書化されているため、スクリプトを遠慮なく確認して、ニーズに合わせて変更してください。
当社製品についてご質問、ご意見、ご提案、その他ご不明な点がございましたら、お気軽にお問い合わせください。
重要なリンクはすべて、Window > Simple IAP Systemの下にある「About」ウィンドウにあります。
ご不明な点がございましたら、サポートフォーラムに回答があるかもしれません。
質問に答えるだけでなく、ガイド、コードスニペット、拡張機能も共有しています。 購入後にUnityAssetStoreからメールで受け取ったアセット請求書IDを使用してフォーラムアカウントを登録してください。
フォーラムの登録中に問題が発生した場合は、info@rebound-games.comまでメールでお問い合わせください。
Unity Asset Storeで私たちをサポートしたい場合は、他の開発者が意見を述べることができるように、そこに短いレビューを書いてください。 繰り返しになりますが、あなたのサポートと幸運に感謝します!
コメント
[…] 添付PDFの通りにやるだけで問題無いと思いますが、https://www.rebound-games.com/forum/topic/1743/guide-google-playこの購入者用フォーラムの各トピックを見ていくとより実践的な内容がわかります。固 […]
[…] 基本的な解説は添付PDF(和訳)で十分足りますが、さらに細かい情報は公式フォーラムのこういったトピックを参照する事ができます。ここでは、自分のメモもかねて手順を書いていき […]