以前とりあげたUnityでのAndroidアプリ内課金プラグインであるprime31のAndroid In App Billing Pluginですが、
AndroidのIn App Billingがversion3になって色々変わっていて、
プラグインの方も大きく変更されているので、新バージョンでの実装メモになります。
prime31
https://www.prime31.com/
今回も管理なしアイテムと、ユーザアカウント毎に管理のアイテムで試しました。
導入時のバージョンはUnity4.0.1、
プラグインのバージョン(公式サイトでのリリース日)は2013-01-21です。
--------------------------------------------------------
※注意:ここで紹介しているバージョンは古いので
実装の際は公式で最新のドキュメントを確認することをおすすめします。
--------------------------------------------------------
※前準備として事前に、デベロッパーコンソールにてアプリと課金アイテムを登録し、
アイテムのみ公開状態にしておく。(アプリが非公開なら、公開されることはない)
テストアカウントの追加を行ない、端末のメインアカウントをテストアカウントにする。
※旧バージョンから移行する場合には、最初にPlugins配下の
InAppBillingAndroid フォルダを削除する必要があります。
以下、実装の簡単な流れ
①Android In App Billing Pluginをインポート(※1)した後、
最初のシーンに GoogleIABEventListener を配置。
DontDestroyOnLoadで死なないようにしておく。
②まずは GoogleIAB.init( publicKey ) で初期化します。
引数にはデベロッパーコンソールで確認できる、自身のパブリックキーを入れます。
アプリ内購入が可能である場合には
GoogleIABEventListenerのbillingSupportedEvent() が非同期で呼ばれ、
アプリ内購入不可の場合は
billingNotSupportedEvent( string error ) が呼ばれます。
③詳細なログ出力を行うかどうかを
GoogleIAB.enableLogging( AndroidDetailLogging ) で設定し、
署名の認証チェックを自動で行うかどうかを
GoogleIAB.setAutoVerifySignatures( AndroidAutoVerifySignatures ) で設定します。
④ GoogleIAB.purchaseProduct( productId ) で購入リクエストを送信する。
購入したいアイテムのプロダクトIDを引数に入れる。
これでマーケットアプリが立ち上がり、アイテムの購入画面が表示される。
⑤購入が正常に終わると、GoogleIABEventListener の
purchaseSucceededEvent( GooglePurchase purchase )
が呼ばれます。ここで対応するアイテム等をゴニョゴニョする。
引数の GooglePurchase にはプロダクトIDやオーダーID等、
購入レシートと同じ情報が含まれています。
⑥In App Billing version3では、消費タイプのアイテムは購入後に消費リクエストを投げないと
追加購入ができなくなるので、
GoogleIAB.consumeProduct( googlePurchase.productId ) で消費リクエストを送ります。
⑦正常に通れば、GoogleIABEventListener の
consumePurchaseSucceededEvent( GooglePurchase purchase ) が呼ばれます。
⑧リストアの実装は GoogleIAB.queryInventory( productIdList.ToArray() )
の引数にプロダクトIDリストを入れて呼ぶことで、
queryInventorySucceededEvent( List<GooglePurchase> purchases, List<GoogleSkuInfo> skus )
が呼ばれ、purchases に購入済みアイテム一覧が入っているので、この情報で復旧できます。
⑨アプリケーションの終了時、OnApplicationQuit()等の中で、
GoogleIAB.unbindService()でBillingServiceを終了する。
⑩その他のGoogleIABEventListener 内イベント
・purchaseCompleteAwaitingVerificationEvent( string purchaseData, string signature )
→ 購入時のレシート通知イベント。GooglePurchaseと同じ情報ですが、
こちらはJSON形式になっています。(※version2のレシートとは形式が異なります)
・purchaseFailedEvent( string error )
→ 購入エラー。キャンセルでも呼ばれます。
・queryInventoryFailedEvent( string error )
→ 購入済アイテムの取得失敗。
・consumePurchaseFailedEvent( string error )
→ 消費の失敗。
※1 他のAssetや独自でAndroidManifestをカスタムしている場合には、
(Plugins→Android配下にAndroidManifest.xmlファイルがある場合)
上書きされてしまうので、AndroidManifestだけはインポートしないでおき、
元のAndroidManifestとprime31のAndroidManifestを手動でマージする必要があります。
AndroidのIn App Billingがversion3になって色々変わっていて、
プラグインの方も大きく変更されているので、新バージョンでの実装メモになります。
prime31
https://www.prime31.com/
今回も管理なしアイテムと、ユーザアカウント毎に管理のアイテムで試しました。
導入時のバージョンはUnity4.0.1、
プラグインのバージョン(公式サイトでのリリース日)は2013-01-21です。
--------------------------------------------------------
※注意:ここで紹介しているバージョンは古いので
実装の際は公式で最新のドキュメントを確認することをおすすめします。
--------------------------------------------------------
※前準備として事前に、デベロッパーコンソールにてアプリと課金アイテムを登録し、
アイテムのみ公開状態にしておく。(アプリが非公開なら、公開されることはない)
テストアカウントの追加を行ない、端末のメインアカウントをテストアカウントにする。
※旧バージョンから移行する場合には、最初にPlugins配下の
InAppBillingAndroid フォルダを削除する必要があります。
以下、実装の簡単な流れ
①Android In App Billing Pluginをインポート(※1)した後、
最初のシーンに GoogleIABEventListener を配置。
DontDestroyOnLoadで死なないようにしておく。
②まずは GoogleIAB.init( publicKey ) で初期化します。
引数にはデベロッパーコンソールで確認できる、自身のパブリックキーを入れます。
アプリ内購入が可能である場合には
GoogleIABEventListenerのbillingSupportedEvent() が非同期で呼ばれ、
アプリ内購入不可の場合は
billingNotSupportedEvent( string error ) が呼ばれます。
③詳細なログ出力を行うかどうかを
GoogleIAB.enableLogging( AndroidDetailLogging ) で設定し、
署名の認証チェックを自動で行うかどうかを
GoogleIAB.setAutoVerifySignatures( AndroidAutoVerifySignatures ) で設定します。
④ GoogleIAB.purchaseProduct( productId ) で購入リクエストを送信する。
購入したいアイテムのプロダクトIDを引数に入れる。
これでマーケットアプリが立ち上がり、アイテムの購入画面が表示される。
⑤購入が正常に終わると、GoogleIABEventListener の
purchaseSucceededEvent( GooglePurchase purchase )
が呼ばれます。ここで対応するアイテム等をゴニョゴニョする。
引数の GooglePurchase にはプロダクトIDやオーダーID等、
購入レシートと同じ情報が含まれています。
⑥In App Billing version3では、消費タイプのアイテムは購入後に消費リクエストを投げないと
追加購入ができなくなるので、
GoogleIAB.consumeProduct( googlePurchase.productId ) で消費リクエストを送ります。
⑦正常に通れば、GoogleIABEventListener の
consumePurchaseSucceededEvent( GooglePurchase purchase ) が呼ばれます。
⑧リストアの実装は GoogleIAB.queryInventory( productIdList.ToArray() )
の引数にプロダクトIDリストを入れて呼ぶことで、
queryInventorySucceededEvent( List<GooglePurchase> purchases, List<GoogleSkuInfo> skus )
が呼ばれ、purchases に購入済みアイテム一覧が入っているので、この情報で復旧できます。
⑨アプリケーションの終了時、OnApplicationQuit()等の中で、
GoogleIAB.unbindService()でBillingServiceを終了する。
⑩その他のGoogleIABEventListener 内イベント
・purchaseCompleteAwaitingVerificationEvent( string purchaseData, string signature )
→ 購入時のレシート通知イベント。GooglePurchaseと同じ情報ですが、
こちらはJSON形式になっています。(※version2のレシートとは形式が異なります)
・purchaseFailedEvent( string error )
→ 購入エラー。キャンセルでも呼ばれます。
・queryInventoryFailedEvent( string error )
→ 購入済アイテムの取得失敗。
・consumePurchaseFailedEvent( string error )
→ 消費の失敗。
※1 他のAssetや独自でAndroidManifestをカスタムしている場合には、
(Plugins→Android配下にAndroidManifest.xmlファイルがある場合)
上書きされてしまうので、AndroidManifestだけはインポートしないでおき、
元のAndroidManifestとprime31のAndroidManifestを手動でマージする必要があります。