[iOS] CargoBayを使用したアプリ内課金(実装編)

2016.04.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

前回、CargoBayを使用したアプリ内課金の各種処理について確認しましたが、今回は、これら組み合わせて5つのタイプ(消耗型、非消耗型、自動更新登録、非更新登録、無料登録)を実装をしてみました。

CargoBayについては、前回の記事をご参照ください。
[iOS]CargoBayを使用したアプリ内課金 (各種処理編)

2 消耗型の実装

github[GitHub] アプリ内課金サンプル(消耗型)

実装しなければならないのは、下記の4項目です。

  • (1) Ovserver登録とレスポンス取得
  • (2) プロダクト情報の問合わせ
  • (3) 購入
  • (4) トランザクションの確認

「購入」ボタンが押されたタイミングでトランザクションを開始して、レスポンスで、SKPaymentTransactionStatePurchasedが返った時に「トランザクションの確認」を入れればいいだけです。

101

102

103

104

3 非消耗型の実装

github [GitHub] アプリ内課金サンプル(非消耗型)

実装しなければならないのは、消耗型の処理に「リストア」を加えたものになります。

  • (1) Ovserver登録とレスポンス取得
  • (2) プロダクト情報の問合わせ
  • (3) 購入
  • (4) トランザクションの確認
  • (5) リストア

と言っても、リストアは1行のコードでトランザクション開始され、SKPaymentTransactionStateRestoredのレスポンスが返った際に、「購入完了」の時と同じように「トランザクションの確認」を実行するだけです。

201

202

203

204

新しい、端末に移動しても、リストアで購入情報の復元が出来ます。

205

206

4 自動更新登録の実装

github [GitHub] アプリ内課金サンプル(自動更新登録)

実装としては、非消耗型と全く同じです。

  • (1) Ovserver登録とレスポンス取得
  • (2) プロダクト情報の問合わせ
  • (3) 購入
  • (4) トランザクションの確認
  • (5) リストア

ただし、「(4)トランザクションの確認」でパスワード(共有シークレット)が必要です。

パスワードは、iThunes Connectでアプリを登録した際に、「機能」の中の「App内課金」を選択した際に表示されている、「共有シークレットを表示」のリンクから確認できます。

408

409

401

402

403

404

405

新しい、端末に移動しても、リストアで購入情報の復元が出来ます。ただし、ここで返ってくるのは、最新のものだけでなく更新された前の記録も返りますので、期限などで最新のものを確認する必要があります。

下記の例では、自動更新の期間を7日間で作成しましたが、試験環境なので、3分で7日という感じで動作しているようです。

406

407

7 非更新登録

github [GitHub] アプリ内課金サンプル(非更新登録)

実装としては、非消耗型とほぼ同じですが、「非更新登録」では、リストアAPIが使用できないため、必要な情報を保存する仕組みが必要です。 この際、別端末や再インストールに対応するためには、ローカル以外に保存するしかありません。サンプルでは、iCludeに保存する方法をとっています。

  • (1) Ovserver登録とレスポンス取得
  • (2) プロダクト情報の問合わせ
  • (3) 購入
  • (4) トランザクションの確認
  • データ保存
  • データ読み込み
501

502

503

504

505

リストアボタンを押した時は、データ読み込みを行います。

506

507

下記は、iCludeを利用した、保存と、読み込みのコードです。

// データ保存
- (BOOL) savePurchaseData :(NSArray *)purchaseData {

    [self appendLog:@"\n>iCloudへの保存"];

    // iCloudへのデータ保存
    NSUbiquitousKeyValueStore* cloudStore = [NSUbiquitousKeyValueStore defaultStore];
    [cloudStore setObject: purchaseData forKey: @"purchaseData"];
    return [cloudStore synchronize];
}

// データ読み込み
- (NSArray *) readPurchaseData {

    [self appendLog:@"\n>iCloudからの読み込み"];
    // iCloudからのデータ読み込み
    NSUbiquitousKeyValueStore* cloudStore = [NSUbiquitousKeyValueStore defaultStore];
    [cloudStore synchronize];
    return [cloudStore arrayForKey: @"purchaseData"];

}

6 無料登録の実装

github [GitHub] アプリ内課金サンプル(無料登録)

実装としては、非消耗型と全く同じです。

  • (1) Ovserver登録とレスポンス取得
  • (2) プロダクト情報の問合わせ
  • (3) 購入
  • (4) トランザクションの確認
  • (5) リストア
301

302

303

304

新しい、端末に移動しても、リストアで購入情報の復元が出来ます。

305

306

無料登録の場合は、iTunes Connect における、下記のような課金プロダクトの追加が必要ありません。というか「App内課金+」の項目自体がありません。 307

「機能」の「App内課金」の所で、プロダクトを追加するだけで有効になっています。

308

7 最後に

今回は、CargoBayを使用したアプリ内課金の各種処理をこれら組み合わせて、5つのタイプ(消耗型、非消耗型、自動更新登録、非更新登録、無料登録)を実装をしてみました。

全タイプ、ほとんど同じ実装で対応可能ですが、一部の違いが、本記事で伝われば幸いです。

8 参考資料


https://github.com/mattt/CargoBay
https://cocoapods.org/pods/CargoBay
[iOS]CargoBayを使用したアプリ内課金 (各種処理編)