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