LoginSignup
26
24

More than 5 years have passed since last update.

UnityIAPのリストア処理(Android)

Last updated at Posted at 2016-05-18

16/10/19
※iOSも一緒なん?と連絡受けましたが
iOSテストした事がないのでわかりません。すいません。

16/09/23
※AssetStoreから最新を入手出来るようになってるようです
https://www.assetstore.unity3d.com/jp/#!/content/68207

16/09/06
※UnityIAPv1.3.1での話ですので 最新だと変わっているかも知れません

UnityIAP

課金システム、大変お手軽です。
http://docs.unity3d.com/ja/current/Manual/UnityIAP.html
ここに全ての情報が載っています。
プラットフォーム毎の登録方法まで載っています。

リストア

課金アイテムは
・消費アイテム(ポイント購入等
・非消費アイテム(解除系
・定期購入(月額会員系。ゲームで見たこと無い?
の3種類あります(GooglePlayの場合)

誤ってアプリを消しても 非消費アイテム、定期購入アイテムは
GooglePlayに買った事が残ってますので、再インストール時に復活(リストア)しましょう
(購入途中で失敗したアイテムもリストアされる?

リストア処理については下記に書いてあります
http://docs.unity3d.com/ja/current/Manual/UnityIAPRestoringTransactions.html

Google Play と Universal Windows アプリでは、
初回の初期化時、所有しているアイテムごとに
IStoreListener の ProcessPurchase メソッドが呼び出されます。

購入時の処理に飛んでくるのね。
何も実装要らんがな!

…と思いきや 飛んでこない…。

はて?

hasReceipt

初期化成功後
OnInitialized(IStoreController ctlr, IExtensionProvider ext)
が呼ばれますが、その後 待てど暮らせど
ProcessPurchase(PurchaseEventArgs args)
は呼ばれる事がありません。

ですが、初期化成功後 返ってきた IStoreControllerに
リストア必要なアイテムは hasReceipt で判断出来るようになっています。

sample.cs
public void OnInitialized(IStoreController ctrl, IExtensionProvider ext)
{
    foreach(var product in ctrl.products.all) {
        if(product.hasReceipt) { // リストア可能なレシートあるよ! 
        // product.definition.id - アイテムID
        // product.receipt - レシート関連(JSON) 
        // サーバー検証して アイテム復元しなはれ
        }
    }
}

これで

無事 非消費アイテム・定期購入アイテムのリストアが出来ると思います。

同僚から「hasReceipt って何かしら」と言われなかったら気がつかなかったorz
…私のググるヂカラ or ドキュメント読解力 弱いですね…

※iOS の SKPaymentTransaction transactionReceipt 無くなるのかしら…

26
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
24