Simple IAP System2による課金実装(1からのアプデ)&マニュアル翻訳

スポンサーリンク
Android
スポンサーリンク
↑管理人が個人でUnity+Live2Dで作成しているスマホゲームです
スポンサーリンク

アセットページの翻訳

概要

Simple IAP Systemは、アプリ課金のためのオールインワンソリューションです。 Unity IAPの利用に問題があり、その為のツールを探していますか?
モバイル、Steam、またはPayPal経由で課金を販売したいですか?このアセットは、初心者にも経験豊富なユーザーにも向けて制作されており、すでに何百人もの開発者によって使用されています。
興味がありますか? Unityフォーラムで何でも聞いてください。
サポートをお探しですか?サポートフォーラムにアクセスしてください。
Webプレーヤー| YouTube

  • アプリ内(virtual)通貨とアイテムを販売する
  • 物理的な製品を配送先住所に販売する
  • ローカライズされた製品の説明
  • ユーザーのアイテム欄(ローカルまたはオンライン)
  • ショップアイテムのプレハブまたは手動配置
  • ショップアイテムの選択状態
  • カスタムロック解除要件
  • ショップのテンプレートScene
  • VRの課金
  • 他のどのIAPアセットよりも多くのショップ

(任意)サードパーティのサービス
ゲームコンテンツの主要な配信パートナーであるXsollaを統合することで、ローカル支払い方法、分析、不正防止、クラウド保存、販売促進のグローバルネットワークがこのアセットに追加されます。
PlayFabとの統合により、クラウド保存、分析、販売促進、モバイルアプリストアの領収書検証でユーザーのアイテム欄を管理する機能が追加されます。
完全な一覧については、最後のスクリーンショットを参照してください。

Simple IAP System Documentation v5.0 和訳

1 入門

ビデオチュートリアルはYoutubeチャンネルを見て下さい。

1 Edit>Project settings>Simple IAP Systemの下にある請求書プラグインウィンドウを開きます。あなたがSimple IAP Systemを新ProjectにインポートしているならPackage StatusチェックはNOT OKになっています。

あなたがユーザに課金させるつもりがなく、アプリ内仮想製品とアプリ内仮想通貨だけで必要としている(ゲーム内で手に入れたコインで剣を買うように)なら、Unity IAPを有効化しなくてもいい事に注意してください。
しかし、実際のお金でアプリ内の仮想アイテムを売るときはUnity IAPのアクティベートが必要です。

2 Window>Package Managerの下にあるUnity In App Purchasingパッケージ(訳注:2021現在、Package ManagerにおいてUnity IAPという名前ではなくIn App Purchasingという名前になってます)をダウンロードします。
Unity IAPの下のPackage StatusのチェックがOKになるはずです。またSimple IAP Systemに含まれるショップテンプレートとプレハブのためにUnity UIパッケージをインポートする必要があります。

3 「Activate Unity IAP」を切り替えて、選択したプラットフォームでUnity IAPを使うようにSimple IAP Systemに指示します。
請求プラットフォームを除外する事で、例えばリアルマネーによる課金をAndroidで出来てiOSで出来ないようにできる事に注意してください。完了したら「Apply」を押します。

4 「IAPManager」プレハブをSimpleIAPSystem>Prefabs>Resoucesからあなたのゲームの一番最初のシーンにドラッグします。あなたがSimple IAP Systemのサンプルシーンを実行させたい場合は「SceneSelection」シーンからスタートします(既にIAPManagerがあります)。

その他の請求ドキュメント:
リアルマネーでの課金プロダクトをUnityでリンクする前に、あなたはそれらをまずApp Store(Google Play, iTunes Connectなど)で作成する必要があります。
もしこれが課金に触れる最初の機会でしたら、App Storeでの設定を成功させる為にフォーラムでストア固有のガイドだけでなくサードパーティ統合についてのガイドも見てください。

2 課金プロダクトのUnityでの作成

Unityにおいて、Project SettingsタブがIAP(リアルマネーでもバーチャルマネーでも)を管理するためのあなたの主要スポットです。Edit > Project Settings > Simple IAP Systemに移動してそれを開いてください。

Categories:ここでは課金製品のグループを指定します。カテゴリーはいくつかの製品をセクションに分ける為に使われ、セクションは後でショップUI中にインスタンス化されます。
Currencies:ここではアプリ内(仮想)通貨を初期値と一緒に定義します。これは他のアプリ内(仮想)プロダクトを購入するのに使われます。
Products:このセクションはアプリ内通貨(アプリ内でのみ存在する)やその代わりにリアルマネー(IDがApp StoreのIDと一致している必要があります)で購入できるアプリ内製品、またはサードパーティの支払いプロバイダを使った物理的な商品を追加する事ができます。

これらはエディタで定義する必要がある製品変数です。
ID:一意な製品ID
Type:課金モデルでの製品タイプ
  ・Comsumables:リアルマネーまたは通貨で何度でも購入できる(例:コイン)
  ・Non-consumables:リアルマネーまたは通貨で一度だけ購入できる(例:ボーナスコンテンツ)
  ・Subscriptions:定期的にプレイヤーにリアルマネーで請求(例:サービスベースのコンテンツ)
Costs:リアルマネーまたはアプリ内通貨、または他の購入時消費型製品での価格
Rewards:アプリ内通貨の金額、または自動的に付与されるその他の製品。ユーザーのインベントリの現在の金額には、DBManager.GetPurchase(製品ID)を介してアクセスできます。消耗品を購入して他の製品を付与する場合、デフォルトの金額は1です。これを0に設定すると、すぐに消費されたものとして扱われるため、何も保存されません。例:選択可能な特別な弾丸:amount> 0、ゲーム内で購入した一時的なパワーアップ:amount= 0。
Fetch::ローカルの商品データを、取得したApp Store側のデータで上書きするかどうか(リアルマネー商品にのみ適用)。さらに、サードパーティのサービス(PlayFabまたはXsolla)を使用する場合、仮想製品データは対応するダッシュボードからも取ってきます。

Overrides
Billing Provider:この製品を購入しようとするときに、独立したサードパーティの課金プロバイダーを指定できます。ここで「PayPal」をアクティブに設定すると、基本的に商品がアプリ外購入に変換されます。これは、物理的な商品や寄付の販売に使用できます(フォーラムガイドを参照)。
Store Meta:複数のAppStoreにデプロイしていて、同じ製品の識別子が異なる場合は、何らかの方法でそれらを「マージ」する方法が必要です。それがオーバーライドの目的です。この例では、GooglePlayとAmazon「を除く」すべてのAppStoreで商品IDが「coins_small」の場合、プラットフォームのオーバーライドセクションに追加することでそれらをオーバーライドできます。
また、一部のストアで商品が入手できない場合は、「Available」チェックボックスをオフに設定できます。その後、製品はUnity IAPに渡されず、アプリがこのストアで起動されたときにショップUIで自動インスタンス化されません。

Requirements
Unlocks:この製品を購入する機能のロックを解除するには、ユーザーはPlayerDataで1つ以上のKey-Valueペアを満たす必要があります。説明はShopItemの「Locked Label」テキストを参照しています。
Upgrades:基本/前段階の製品を購入した後、順番にしか入手できない製品の繋がりを作ることができます。その後の製品のアップグレードは、ショップに表示する必要はありません。基本製品は、現在アップグレードされている製品に置き換えられます。

3 ショップ内製品のインスタンス化

ショップシーンのIAPContainerコンポーネントがすべての作業を行います。それについて見てみましょう。
ショップシーンの例の1つを開いてください。 SimpleIAPSystem>Scenes> Vertical2D
製品をインスタンス化する視覚的表現(Itemプレハブ)とグループ(Category)を定義するだけで済みます。 SimpleIAPSystem>Prefabs>Vertical/Horizontalフォルダーにある、いくつかの事前定義されたIAP Itemプレハブから選択できます。シーンを再生すると、対応するカテゴリIAPがインスタンス化されてコンテナにペアレント化され、UnityのGridLayoutGroupコンポーネントがシーンのScrollView上でそれらを適切に配置します。
シーン内のアイテムとして商品をインスタンス化した後、IAPManagerは、ユーザーの在庫に基づいて、商品を正しい購入状態に設定することも確認します。これは、すでに購入した商品のショップアイテムに購入ボタンが表示されなくなったり、装備されたアイテムに再度選択を解除するボタンが表示されたりすることを意味します。
IAPContainerを使用した製品の自動インスタンス化を使用したくない場合、または製品が1つか2つしかない場合は、ShopItemプレハブをシーンに直接ドラッグアンドドロップすることもできます。
この場合、インスペクターに製品IDを入力するだけで、プロジェクト設定で参照されている製品への接続を確立できます。

4 ショップアイテムのカスタマイズ

前の章で述べたように、ShopItemプレハブは実行時にショップ内のIAP製品を視覚化します。これらのプレハブには、ShopItem2Dコンポーネントがアタッチされており、アイテムのすべての重要な側面への参照があります:例として説明的なラベル、購入ボタン、アイコンスプライトなど。
商品の状態に基づいて、ショップアイテムはプレハブインスタンスのさまざまな部分を表示または非表示にします。
ショップアイテムは、以前のユーザーとのやり取りに応じて、いくつかの異なる状態を持ちます。
アイテムの可能な状態は、ShopItemコンポーネントへの参照を割り当てることによって指定されます。
Default:アイテムには、少なくとも説明ラベル(タイトル/説明、価格)と購入ボタンが必要です。
Discounted:ゲームオブジェクトを「Discounted」スロットに割り当てます。このスロットは、手動で(製品の「Discounted」チェックボックスを有効にして)、またはサードパーティのサービスでセールを行うことでアクティブになります。
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」の割り当てが表示されます。
•Preview:製品が他の製品を報酬として付与する場合、ユーザーが製品を購入する前に製品のコンテンツをプレビューできるようにすることができます。 「Preview Button」を割り当てます。

Simple IAP SystemのすべてのUI要素は、UnityのデフォルトのUIパッケージを使用することに注意してください。 UnityでUIを操作する方法を説明することは、このドキュメントの範囲外ですが、それに慣れていない場合は、Unityが提供する公式ドキュメントまたはビデオチュートリアルを参照してください。

5 ショップテンプレート

独自デザインのために、独自の画像をインポートし、ゲームのスタイルに合わせてショップシーンとIAP Itemプレハブを構築することを強くお勧めします。これにより、コンバージョン率が大幅に向上します。最初にテンプレートの解説された機能を確認し、次に使用されるウィンドウの詳細について説明します。

Vertical2D / Horizontal2D
両方のシーンはいくつかのタブに分かれており、以下で説明するようにさまざまな機能を紹介しています。
各タブボタンは、コンテナに接続されたIAPContainerコンポーネントによって製品で満たされた、ScrollRectsを備えた個別のウィンドウゲームオブジェクトを有効にします。 IAPContainerは、さまざまなデバイスのアスペクト比と解像度、およびシーン内のShopItemプレハブの幅/高さに応じて、GridLayoutGroupのセルサ​​イズを動的に調整します。 IAPContainerでは、解像度が高い場合にアイテムの最大幅/高さを設定することもできます。これらのシーンの上部には、「CurrencyContainer」スクリプトを介して取得および設定された現在の通貨額の表示も表示されます。
Tab1:これらはSISの最も基本的なサンプルであり、リアルマネーで購入した製品のみが含まれています。
Tab2:アプリ内通貨で購入できる消耗品と非消耗品が含まれています。
Tab3:コンテナ上の追加のToggleGroupによって処理される単一選択のプレハブを見せます。
Tab4:複数選択のプレハブ(ここでも、コンテナ上のToggleGroupコンポーネント)と、要件のロックを解除した後にのみ購入できるロックされたShopItemプレハブを紹介します。
More:このタブには、SimpleIAPシステム全体のさまざまな機能のためのいくつかのボタンがあります。
 ・Restore:UIButtonRestoreコンポーネントを含むボタン。サポートされているプラ​​ットフォームでは、これによりIAPManager.RestoreTransactionsが呼び出されます。復元ボタンを指定しない場合、Appleはアプリを拒否することに注意してください。トランザクションを復元する必要がないプラットフォームでは、このボタンは自動的に無効になります(したがって、Androidで実行しているときに表示されない場合があります)。
 ・Level Up:カスタムプレーヤーデータ、特に「レベル」変数を増やして、アイテムのロックを解除します。
 ・Consumes:「エネルギー」製品を消費しようとしますが、現在所有していない場合は失敗する可能性があります。
 ・Coupon:PlayFab&Xsollaでサポートされており、製品を無料で付与するためのクーポンコードの引き換え。

VR
デフォルトのショップシーンは、2つの理由でVRでは機能しません。入力が通常のクリックまたはタッチではないことと、UIキャンバスがワールドスペースにある必要があることです。そのため、このシーンは、SimpleIAPSystem>Prefabs> VRフォルダーに追加のショップアイテムプレハブ(IAPItemVR、IGCItem_SingleSelectVR)とともに分離されています。 Unityの公式VR学習プロジェクトのコンポーネントは、VRデバイスをサポートするために使用されています。このVRショップで使用されているメカニズムの概要を説明します。
MainCameraには、レチクルとセレクションラジアルとともにいくつかのVRスクリプトがあります。
ユーザーの確認が必要な各UIボタン(ショップアイテムの購入ボタンなど)には、VRInteractiveItemとBoxColliderコンポーネントがアタッチされています。これは、MainCameraのVREyeRaycasterスクリプトが実際にそれらを確認ボタンとして認識するようにするためです。
VRInteractiveItemには、インスペクターのさまざまなアクションにマップされたいくつかのUnityEventがあります。
UIインタラクション(ホバー、クリック)をVRで機能させるために、デフォルトのGraphicRaycasterUnityがCanvasにアタッチすることは無意味です。VRGraphicRaycasterは、UnityのソースのVR互換バージョンです。
追記:プレーヤー設定で「Virtual Reality Supported」がチェックされていて、「SceneSelection」シーンからアプリを起動している場合、VRショップシーンが自動的に読み込まれます。

Window Prefabs

サンプルシーンには、ShopItemだけでなく、拡張機能用のいくつかのウィンドウも含まれています。これらの各ウィンドウは、カスタマイズしたり、独自のウィンドウに置き換えたり、削除したりすることもできます。
 UIShopFeedback:このプレハブは実際にはウィンドウではありませんが、他のすべてへの参照が含まれています。そのため、その唯一の目的は、さまざまなシナリオでフィードバックを管理し、ユーザーに提示することです。これは、他のスクリプトによって呼び出されるユーザーアクション間のメインインターフェイスとして機能します。
 Message:製品が購入、消費、またはその他の方法で処理に失敗した場合に備えて、フィードバックテキストを表示します。そのウィンドウゲームオブジェクトとTextコンポーネントはUIShopFeedbackによって有効にされ、発信元の呼び出しはIAPManager、DBManager、およびIAPListenerから送信されます。
 Confirm:購入トランザクションが現在処理中であるというメッセージを表示し、閉じるボタンで早期にキャンセルします。これは、PayPalやXsollaのように、アプリの外部で行われる支払いに必要です。トランザクションは自動的に更新されるか、ユーザーがトランザクションの完了を確認するために更新されます。基盤となるストアの実装によって有効になります。
 BundlePreview:商品バンドルのコンテンツを表示します。つまり、商品に報酬として他の商品が含まれている場合です。これは、ShopItemのプレビューボタンから有効になります。

デバイス保存領域の暗号化

オプションで、デバイス上でDBManagerによって作成された値を暗号化できます。 IAPManagerプレハブインスペクターで、「Encrypt」を切り替えてこれを行います。また、「Obfusc Key」を独自の暗号化キー(iOS / Androidでは8文字、Windows Phone 8では16文字)に置き換えることを忘れないでください。他の手法の方が安全ですが、多くのApp Storeでは、これらの標準を使用してアプリを送信するときに暗号化登録番号(ERN)が必要です。この手法はERNを必要としません。
アプリをAppleのAppStoreに送信しようとしていて、アプリに暗号化が含まれているかどうかを尋ねられた場合は、[はい]をクリックします。アプリが免除の対象かどうかを尋ねられた場合は、もう一度[はい]をクリックすると完了です。
Simple IAP SystemデータベースはUnityのPlayerPrefsに保存されているため、レジストリファイルで確認できます。ただし、もっと簡単な方法もあります。Unityでは、[編集]> [Project Settings]> [Simple IAP System]> [Tools]でデータベース表示を開くと、デバイスに現在保存されているものを確認できます。
レジストリでは、暗号化されていないデータと暗号化されたデータは次のようになります。{“Content”:{“no_ads”:”false”,…}、DHdCnJfciE/vPhR….
IAPテストの合間に「Clear」ボタンを押して、そのエントリをクリーンアップすることをお勧めします。

警告:PlayerPrefsデータベースの実装(DB Manager)では、変数のセットアップが1回だけ必要になる場合があることに注意してください。本番(ライブ)バージョンで値を再度変更する場合は、アプリの既存のユーザーに対して何らかのデータの乗っ取りを自分で実装する必要があります。そうしないと、データが失われる可能性があり、顧客に不満が生じる可能性があります。例:
➢プロジェクト設定で仮想通貨の名前を変更または削除する
➢プロジェクト設定でIAPの名前を変更または削除する
➢DBManagerの内部ストレージパスの名前を変更する
➢DBManagerで暗号化オプションを切り替えるか、難読化キーを変更する
アセットの作成者は、Simple IAP Systemの使用に起因または関連して発生した、使用、データ、または利益の損失に起因するいかなる損害についても責任を負いません。

7 レシート検証

IAPを設定したら、アプリにセキュリティレイヤーを追加して、ハッカーがIAPクラッカーを使用したり、偽の購入を送信したり、ローカルデータベースストレージを上書きしたりするだけでアイテムのロックを解除できないようにすることができます。領収書の確認は、IAPの著作権侵害との戦いに役立つ可能性があります。 Simple IAP Systemでは、現在、アプリで領収書の確認を使用する方法について2つのオプションがあります。

クライアント側の領収書の検証
このオプションは、バンドルとApp Store開発者キーを利用して、レシートがアプリによって作成されたことを確認します。このチェックをローカルで(クライアントのデバイスで)実行するとセキュリティ上の欠陥が発生しますが、これは数回クリックするだけで少なくともいくつかの著作権侵害防止を追加するための非常に高速なアプローチです。
1 [ウィンドウ]> [Unity IAP]> [領収書検証難読化ツール]でUnityIAPの難読化ツールを開き、Googleストアキーを入力して(Google Playにデプロイしている場合のみ)、[難読化]ボタンを押します。これにより、プロジェクト内に追加のクレデンシャルファイルが作成されます。
2 IAPManagerプレハブを見つけて、ReceiptValidatorClientコンポーネントを追加します。
3 ReceiptValidatorClientスクリプトを開き、9行目の//コメント解除行を削除します(これは、スクリプトが以前に作成された難読化ファイルなしでエラーをスローするために必要です)。

サービス側の領収書の確認(PlayFabを使用する場合に必要)
このオプションは、レシートの検証にPlayFab API +サーバーを利用します。したがって、このオプションを使用するには、アクティブなPlayFab開発者アカウント(無料枠で十分です)が必要です。サーバー側と同じように、検証部分はユーザーの手に委ねられていません。レシートは購入時にサーバーに送信され、Apple、Google、またはAmazonとのトランザクションをそれぞれ検証しますが、それが一意であり、以前に使用されたことがないことも確認します。レシートは1回しか検証できないため、このオプションは、アクティブなサブスクリプションまたは期限切れのサブスクリプションの検証には適していません。これは、それらが重複として拒否されるためです。それでも、サブスクリプションを実装する予定がない場合は、クライアント側の検証よりも安全です。それを使用するには:
1.プラグインセットアップウィンドウでPlayFabの「フルスイート」または「検証のみ」が設定されていることを確認します
2.ReceiptValidatorServiceコンポーネントをIAPManagerプレハブに追加します
PlayFabの検証ロジックはコスト的に最適化されていることに注意してください。PlayFabは、アプリを使用する月間アクティブユーザー(MAU)に基づいて追加のAPI制限の請求を計算します。 「検証のみ」の実装では、PlayFabユーザーは実際にアプリ内購入を行ったときにのみ作成されるため(他には何もありません)、MAU数は可能な限り少なくなります。

カスタム領収書の検証
サーバーで独自のカスタム検証を使用する場合、IAPManagerは、初期化または購入イベントのいずれかで発生する2つのイベントも提供します。
パブリック静的イベントアクションrecipientValidationInitializeEvent;
public static event Action receiveValidationPurchaseEvent;
初期化時のイベントは、IAPManagerが正常に初期化され、購入済みの製品のリストを受信したときに発生します。このイベントを使用して、サブスクリプションレシートまたは保存されているローカルレシートを再検証できます。購入イベントは、新規購入の領収書を含むUnityIAP製品を配信します。
スクリプトは、検証する対象に応じて、一方または両方のイベントをサブスクライブできます。コードサンプルについては、前述のReceiptValidatorの実装を参照してください。

8 プログラミングとIAPコールバック

次のように、プログラミングのほとんどはすでに内部で処理されていることに注意してください。
•非消耗品/サブスクリプション製品を購入後に「購入済み」に設定する
•「通貨」製品の購入後に仮想通貨を付与する(プロジェクト設定を介して)
•消耗品のカスタム使用量の追加(プロジェクト設定を介して)
•仮想製品の購入の通貨を差し引くなど。
ユーザーに優れたフィードバックウィンドウを表示したい場合でも、それはIAPListenerに追加するものです(テキストを自分で定義できるため)。 IAPListenerスクリプトには、ユーザーが商品を購入したときに何が起こるかを示すHandleSuccessfulPurchaseメソッドと、商品が正常に消費されたときに起動されるHandleSuccessfulConsumeメソッドがあります。
以下は、ゲームの任意の時点でプログラミングを使用して実行できるいくつかの例です。すべてのコードスニペットは、提案されたスクリプトの場所とともにリストされた例です。
IAPListenerの:HandleSuccessfulPurchase

case "coins_small":
//カスタム文をフィードバックする
ShowMessage("1000 coins were added to your balance!");
break;
case "health":
//たとえば製品がショップではなくゲーム中に購入された場合、2回目のチャンスを受け取るか回復します
if(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name == "MyGameScene")
{
//製品をすぐに消費しようとする
IAPManager.Consume("health", 1);
}
else
ShowMessage("救急セットがアイテム保管庫に追加された");
break;

IAPListenerの: HandleSuccessfulConsume

case "health":
//for example, add health to your custom player class
Player.GetInstance().AddHealth(75);
break;

繰り返しになりますが、IAPListenerで通貨金額や商品の付与を手動で処理する必要はありません。上記のように、これはすべて自動的に処理されます。 「coins_small」コードを見るとき、ユーザーに表示されるのはメッセージのみであることに注意してください。金額は内部で追加されます。
これの例外は、ゲーム中にポップアップでアプリ内購入を提供している場合、またはショップシーンがゲームシーンに含まれている場合です。上記の「健康」コードの例では、最初に、製品が購入された現在のシーンをチェックします。ゲームシーンにいる場合は、すぐに製品を消費しようとします。何が起こるかは、HandleSuccessfulConsumeで処理されます。
Simple IAP Systemの更新プロセスを簡単にするために、デフォルトのIAPListenerスクリプトを使用する代わりに、独自のリスナースクリプトを作成し、ゲームロジックに必要なIAPManagerメソッドのみをサブスクライブして、IAPManagerプレハブにアタッチすることをお勧めします。
また、ゲームの起動時、特定のイベント、またはプレイ中に到達したチェックポイントでIAPメソッドを呼び出したい場合もあります。いくつかの例を以下に示します。
あなたのゲームロジック
開始時:

if(DBManager.IsSelected("weapon1")) //製品が選択されている
Player.InstantiateWeapon(…) //プレイヤーに対応する武器を与える
//残りの仮想製品の量を返しUIラベルテキストに表示する
label.text = DBManager.GetPurchase("energy").ToString();

広告を見せる前:

if(DBManager.GetPurchase("no_ads") > 0) //製品が買われているかチェック
if(DBManager.IsPurchased("no_ads")) //同じチェックの略記

ゲーム中:

IAPManager.Consume("bullets", 10); //仮想製品の量を10減らす

終了時:

DBManager.SetPlayerData("score", new SimpleJSON.JSONData(2250)); //ハイスコアを保存
DBManager.AddPlayerData("xp", 100); //現在のユーザEXPを100増やす
DBManager.AddCurrency("coins", 200); //ユーザの仮想通貨を200増やす

おそらく、いくつかのメソッドがDBManagerを利用していることに気づいたでしょう。 DBManagerは、PlayerPrefsデータベースを管理し、購入、選択、仮想通貨、およびその他のプレーヤー関連データを追跡します。基本的に、購入データを変更するときはいつでも、IAPManagerのメソッドを呼び出す必要があります。プレーヤーに関連するカスタムデータについては、DBManagerのメソッドを呼び出す必要があります。 SISを使用して追加することにより、名前空間を含めることを忘れないでください。独自のスクリプトの上部にあります。アプリに統合するために利用できるアクションとメソッドは他にもたくさんあります。これらは、アプリ内購入に関連するほぼすべてのユースケースをカバーするのに十分な柔軟性を備えている必要があります。メソッドに静的コンテキスト(IAPManager.xxxまたはDBManager.xxxなど)でアクセスできる場合は、それを利用できるように設計されています。
完全なリストについては、スクリプトリファレンスをご覧ください。

9 コンタクト


完全なソースコードが提供され、すべての行が十分に文書化されているため、スクリプトを確認して、ニーズに合わせて変更してください。
当社の製品についてご質問、コメント、提案、その他の懸念がある場合は、遠慮なく私に連絡してください。すべての重要なリンクは、[Simple IAP System]の[Project Settings]にある[About]タブにあります。
Simple IAPSystemは2013年からUnityAsset Storeにありますが、ユーザーがあなたのようである限り、それを維持し、機能を追加していきます。 –それを使用しています。
Unity Asset Storeで私をサポートしたい場合は、他の開発者が意見を述べることができるように、評価を追加するか、そこに短いレビューを書いてください。繰り返しになりますが、あなたのサポートに感謝し、あなたのアプリで頑張ってください!

SIS2のアップデートについて

公式ガイド(和訳)

新しいバージョンにアップグレードする時は、IAPSettings.asset(プロダクトをプロジェクト設定に保存する)とIAPListenerスクリプト(プロダクトのコールバック)を保持することをお勧めします。
ReceiptValidatorClientスクリプトを使用してその内容のコメントを外した場合は、それも覚えておいてください。
importプロンプトで、それらすべてのチェックを外し、残りを上書きします。その後、プロジェクト設定のIAP設定がまだ有効であることを再確認してください。

SIS1からSIS2へのアップグレードについて

必要な作業

管理画面

まずは旧バージョンのSISのプロダクト管理画面でExport to JSONを押してエクスポートします。その後、アップデート後のSIS2の管理画面(Project Settings内)でImport from JSONを押します。
TextMeshProを使っている場合プレハブや参照を全て変更する為、ToolsタブからSource CustomizationでText Mesh Proを選びConvertを押します。
また、消耗品プロダクトの購入数(購入したときに増える所持数。普通は1)を改めて入力する必要があります。RewardsのProductを自身のものに選び購入時の取得個数を入力します。これをしないと消耗品プロダクトを購入しても所持数が増えません。

オブジェクトの参照を修正する

ShopManagerスクリプトはなくなったので、アタッチしていたオブジェクトがあるなら削除します。
IAPContainerのcategoryやItem PrefabのIAPItemプレハブへの参照が外れているので再び参照し直します。IAPItemプレハブをカスタマイズしている場合、ShopItem2Dスクリプトをアタッチします。旧バージョンでIAPItemプレハブをカスタマイズしている場合は上書きされないようにアップグレード前に別名で待避しておきます。

SIS2で削除されたファイル

私のインストール済みバージョンSIS1のファイル群のうち、SIS2では

\Assets\SimpleIAPSystem\Editor\AboutSISEditor.cs
\Assets\SimpleIAPSystem\Editor\ClearDatabaseEditor.cs
\Assets\SimpleIAPSystem\Editor\EditorFiles\Asset_smallLogo.png
\Assets\SimpleIAPSystem\Editor\IAPEditor.cs
\Assets\SimpleIAPSystem\Editor\IAPEditorExporter.cs
\Assets\SimpleIAPSystem\Editor\PluginSetupEditor.cs
\Assets\SimpleIAPSystem\Editor\RequirementEditor.cs
\Assets\SimpleIAPSystem\Editor\ReviewWindowEditor.cs
\Assets\SimpleIAPSystem\Editor\ShowDatabaseEditor.cs
\Assets\SimpleIAPSystem\Prefabs\Resources\ShopManager.prefab
\Assets\SimpleIAPSystem\Prefabs\Scenes\AllSelection.unity
\Assets\SimpleIAPSystem\Prefabs\Scenes\Horizontal.unity
\Assets\SimpleIAPSystem\Prefabs\Scenes\HorizontalMenu.unity
\Assets\SimpleIAPSystem\Prefabs\Scenes\HorizontalTabs.unity
\Assets\SimpleIAPSystem\Prefabs\Scenes\Vertical.unity
\Assets\SimpleIAPSystem\Prefabs\Scenes\VerticalMenu.unity
\Assets\SimpleIAPSystem\Prefabs\Scenes\VerticalTabs.unity
\Assets\SimpleIAPSystem\Scripts\PlayFab\PlayfabPayPalStoreWindow.cs
\Assets\SimpleIAPSystem\Scripts\IAPItem.cs
\Assets\SimpleIAPSystem\Scripts\PlayfabManager.cs
\Assets\SimpleIAPSystem\Scripts\ShopManager.cs
\Assets\SimpleIAPSystem\Scripts\UpdateFunds.cs
\Assets\SimpleIAPSystem\Textures\UI\armory.png
\Assets\SimpleIAPSystem\Textures\UI\cart.png
\Assets\SimpleIAPSystem\Textures\UI\customize.png

が削除されています。
古いスクリプトにカスタマイズした処理がある場合は適宜、新しいスクリプトに移します。
また、古いスクリプトを残してアプデすると、IAPObjectクラスが無くなっているため「Assets\SimpleIAPSystem\Scripts\IAPItem.cs(132,26): error CS0246: The type or namespace name ‘IAPObject’ could not be found (are you missing a using directive or an assembly reference?)」というようなエラーが出てしまいますので削除が必要です。
その他の更新ファイルにカスタマイズ済のコードがある場合は、アプデ前に差分をよく確認する事をおすすめします。

上記ファイルのカスタマイズ部分を抜き出して適宜移行したら削除します。

自前スクリプトのSIS参照部分を修正していく

いくつか廃止されたプロパティなどがありますのでエラーが出てしまいます。一つずつ修正していきます。以下は自分が直面したもので、網羅したものではありません。

'DBManager' does not contain a definition for 'isPurchased'

このエラーはDBManager.csのisPurchased()メソッドがIsPurchased()メソッドに改名された事によるものなので、呼び出し元を修正します。

'DBManager' does not contain a definition for 'IncreasePlayerData'

このエラーはDBManager.csのIncreasePlayerData()メソッドがAddPlayerData()メソッドに改名された事によるものなので、呼び出し元を修正します。また、IncreasePlayerData()の第2引数にネガティブ値は設定出来なくなっており、その代わりにConsumePlayerData()が追加実装されています。消費型アイテムの消費処理を記述している所では修正が必要です。

ゲーム内通貨によるアイテム購入を検証するDBManager.VerifyVirtualPurchase()はCanPurchaseVirtual()になっています。

購入後のカスタム処理部分を変更する

DBManager.csも中身がごっそり変わっており、内部でカスタムコードを書いていた場合は待避させて新しいメソッドに移す必要があります。

消耗品型プロダクトの保存データKeyの不整合に注意

SIS2ではSIS1利用時の非消耗品プロダクト購入データは”Content”キーで、消耗品プロダクト購入データは”Player”キーで保存されていました。
SIS2利用でのプロダクト購入データはどちらも”Content”キーに保存されます。このままではSIS1でコンテンツを購入したユーザの購入データとの不整合が起こり危険です。

これを回避するために

(DBManager.GetPlayerData("com.patio.test.item_1").AsInt + DBManager.GetPurchase("com.patio.test.item_1"))

のようにして合算した所持数(GetPlayerData()がSIS1で保存された消耗プロダクト購入データの取得)を所持数表示や所持数の条件式に使ったり、

if (DBManager.GetPlayerData("com.patio.test.item_1").AsInt > 0)
{
    DBManager.ConsumePlayerData("com.patio.test.item_1", 1);
}else if(DBManager.GetPurchase("com.patio.test.item_1") > 0)
{
    DBManager.ConsumePurchase("com.patio.test.item_1", 1);
}

の様に片方から順に消費するような処理(ConsumePlayerData()はPlayerキーのデータ、ConsumePurchase()はContentキーのデータ)を書く必要があります。
もしくは、少し怖いですが消耗品データをPlayerキー下からContentキー下に移す様な一回限りの処理を実装する必要があります。

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
読み込み中...

コメント

広告ブロッカーを無効にしてください。

タイトルとURLをコピーしました