iOS In App Purchase(リクエスト)
前回, In App Purchaseの購入を監視および処理を入れるための, Observerについて書きました。
次は, リクエストの発行です。(Observerを適切に入れないと処理できません。)
In App Purhcaseを許可しているかどうかを検出
In App purhcase は, 設定でOffにすることが可能です。それをコードで検出します。
if ( [SKPaymentQueue canMakePayments] ) { // Support } else { // Not Support }
サポートしている場合のみ発行します。
購入
個別の購入のリクエストを発行します。必要なのはiTunes Connectで設定したProduct IDです。
NSSet *set = [NSSet setWithObject:@"productID"]; SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set]; [productsRequest start];
productIDのところにIDをいれます。NSSetにsetした分だけ購入できます。ですので, 複数setすれば複数同時に進行します(処理のところで分離されます)。
リクエストをハンドルするDelegateを実装
先ほどの購入のコードを入れたクラスに, SKProductsRequestDelegateを実装します。
必要なのは, -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)responseというメソッドです。
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { if ([response.invalidProductIdentifiers count] > 0) { // Invalid Item Error } else { for (SKProduct *product in response.products) { SKPayment *payment = [SKPayment paymentWithProduct:product]; [[SKPaymentQueue defaultQueue] addPayment:payment]; } } }
これは, 購入処理のプロンプトから, SKPaymentQueueへの処理を追加するコードで上のやつとあわせて動作します。
ここまでで購入はおしまいです。
リストア Restore
リストアを発行する方法です。
リストアはすべての購入を元に戻す作業です。個別の購入とは違いすべての購入履歴のレシートをチェックします。
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
これでObserverと, リクエストが完成しました。これでClient側の処理がだいたい終わりです。
後はレシートをサーバにおくるところなどでしょうか。