この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
前回、CargoBayを使用したアプリ内課金の各種処理について確認しましたが、今回は、これら組み合わせて5つのタイプ(消耗型、非消耗型、自動更新登録、非更新登録、無料登録)を実装をしてみました。
CargoBayについては、前回の記事をご参照ください。
[iOS]CargoBayを使用したアプリ内課金 (各種処理編)
2 消耗型の実装
実装しなければならないのは、下記の4項目です。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
「購入」ボタンが押されたタイミングでトランザクションを開始して、レスポンスで、SKPaymentTransactionStatePurchasedが返った時に「トランザクションの確認」を入れればいいだけです。
3 非消耗型の実装
実装しなければならないのは、消耗型の処理に「リストア」を加えたものになります。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- (5) リストア
と言っても、リストアは1行のコードでトランザクション開始され、SKPaymentTransactionStateRestoredのレスポンスが返った際に、「購入完了」の時と同じように「トランザクションの確認」を実行するだけです。
新しい、端末に移動しても、リストアで購入情報の復元が出来ます。
4 自動更新登録の実装
実装としては、非消耗型と全く同じです。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- (5) リストア
ただし、「(4)トランザクションの確認」でパスワード(共有シークレット)が必要です。
パスワードは、iThunes Connectでアプリを登録した際に、「機能」の中の「App内課金」を選択した際に表示されている、「共有シークレットを表示」のリンクから確認できます。
新しい、端末に移動しても、リストアで購入情報の復元が出来ます。ただし、ここで返ってくるのは、最新のものだけでなく更新された前の記録も返りますので、期限などで最新のものを確認する必要があります。
下記の例では、自動更新の期間を7日間で作成しましたが、試験環境なので、3分で7日という感じで動作しているようです。
7 非更新登録
実装としては、非消耗型とほぼ同じですが、「非更新登録」では、リストアAPIが使用できないため、必要な情報を保存する仕組みが必要です。 この際、別端末や再インストールに対応するためには、ローカル以外に保存するしかありません。サンプルでは、iCludeに保存する方法をとっています。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- データ保存
- データ読み込み
リストアボタンを押した時は、データ読み込みを行います。
下記は、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 無料登録の実装
実装としては、非消耗型と全く同じです。
- (1) Ovserver登録とレスポンス取得
- (2) プロダクト情報の問合わせ
- (3) 購入
- (4) トランザクションの確認
- (5) リストア
新しい、端末に移動しても、リストアで購入情報の復元が出来ます。
無料登録の場合は、iTunes Connect における、下記のような課金プロダクトの追加が必要ありません。というか「App内課金+」の項目自体がありません。
「機能」の「App内課金」の所で、プロダクトを追加するだけで有効になっています。
7 最後に
今回は、CargoBayを使用したアプリ内課金の各種処理をこれら組み合わせて、5つのタイプ(消耗型、非消耗型、自動更新登録、非更新登録、無料登録)を実装をしてみました。
全タイプ、ほとんど同じ実装で対応可能ですが、一部の違いが、本記事で伝われば幸いです。
8 参考資料
https://github.com/mattt/CargoBay
https://cocoapods.org/pods/CargoBay
[iOS]CargoBayを使用したアプリ内課金 (各種処理編)