2014年7月3日木曜日

【iOS技術連載】In-App Purchase 第4回 - プロダクトの復元処理

【In-App Purchase 第4回】

In-App Purchaseに関する連載4回目です。
今回は、購入済みのプロダクトの復元処理についてご紹介します。


プロダクトの復元が必要な場面として、以下のケースが考えられます。

  • アプリケーションを(削除して)再インストールした。
  • 端末を買い替えた・買い足した。

上記のような場合でも、プロダクト購入の事実はApp Store側に記録されているので、復元の要求を行うことで、現在の端末でも購入済みプロダクトを引き続き使用可能にすることができます。






第3回までの内容が実現されていれば、プロダクトの復元の実装は非常に簡単です。


  [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];


上記の1文で、復元用の支払いトランザクションが開始され、SKPaymentTransactionObserverプロトコルに状態変化や完了が通知されます。

第3回のコード例を再掲します:


 - (void)paymentQueue:(SKPaymentQueue *)queue
  updatedTransactions:(NSArray *)transactions {

      // 通知された支払いトランザクションそれぞれについて:
      for (SKPaymentTransaction *transaction in transactions) {
          switch (transaction.transactionState) {
              case SKPaymentTransactionStatePurchased: {
                  // プロダクト購入が完了した。
                  // プロダクトを使えるようにする(★)。

                  [queue finishTransaction:transaction];

                  break;
              }
              case SKPaymentTransactionStateRestored: {
                  // 購入済みプロダクトの復元が完了した。
                  // 多くの場合、購入完了時と共用可能(★)。

                  [queue finishTransaction:transaction];

                  break;
              }
              case SKPaymentTransactionStateFailed: {
                  // 支払い処理が失敗した。
                  // エラー表示などを行う。

                  [queue finishTransaction:transaction];

                  break;
              }
          }
      }
  }


プロダクトが復元されると、上記コード中のSKPaymentTransactionStateRestoredのcase文が実行されます。

また復元の完了は、下記のメソッドでハンドリングします:


 - (void)paymentQueueRestoreCompletedTransactionsFinished:
         (SKPaymentQueue *)queue {

     // 復元トランザクションが完了した。
     // 利用者に対するメッセージ表示、画面の再描画などを行う。
 }



アイウィーヴの製品では、アプリケーション内販売を行っている下記アプリケーションのすべてで、復元処理
(リストア)を用意しています:




今回は、購入済みのプロダクトの復元処理についてご紹介しました。
次回は最終回として、アプリケーション申請とプロダクトの登録のタイミングについてご紹介する予定です。





1 件のコメント:

  1. MacとiOSデバイスの体験を向上させる様々な素晴らしいソフトウェアとツールを入手するサイト:http://www.coolmuster.jp/idevice-tips/

    返信削除