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 で判断出来るようになっています。
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 無くなるのかしら…