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側の処理がだいたい終わりです。
後はレシートをサーバにおくるところなどでしょうか。
