甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

In-App PurchaseでProductsRequestの応答にInvalid Product IDが含まれる場合にチェックすべきこと

In-App Purchase(アプリ内課金)で課金対象プロダクトについての情報を取得するときなどには、SKProductsRequestオブジェクトに対してstartメッセージを送信する。

- (void)sendProductsRequestWithProductIdentifiers:(NSSet *)identifierSet delegate:(id)productsRequestDelegate {
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:identifierSet];
    request.delegate = productsRequestDelegate;
    [request start];
}

この要求への応答はdelegateに対するproductsRequest:didReceiveResponse:で得られる。

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    // [response.invalidProductIdentifiers count]は0であることが期待される。
}

通常は応答に含まれるinvalidProductIdentifiersの要素数は0であることが期待される。ここに無効なプロダクトのIDが含まれている場合には、何らかの問題が発生している可能性がある。下記ページに掲載されていたチェックリストが大変参考になった。

以下でそのチェックリストを引用し、項目の詳細についていくつか注記する。

  • Have you enabled In-App Purchases for your App ID?*1
  • Have you checked Cleared for Sale for your product?*2
  • Have you submitted (and optionally rejected) your application binary?
  • Does your project's .plist Bundle ID match your App ID?*3
  • Have you generated and installed a new provisioning profile for the new App ID?
  • Have you configured your project to code sign using this new provisioning profile?
  • Are you building for iPhone OS 3.0 or above?
  • Are you using the full product ID when when making an SKProductRequest?*4
  • Have you waited several hours since adding your product to iTunes Connect?*5
  • Are your bank details active on iTunes Connect?*6
  • Have you tried deleting the app from your device and reinstalling?
  • Is your device jailbroken? If so, you need to revert the jailbreak for IAP to work.

*1:使用しているApp IDについて、In-App Purchaseが有効に設定されているか。iOS Provisioning Portalで確認できる。

*2:プロダクトが「Cleared for Sale」になっているか。iTunes ConnectでIn-App Purchaseの課金対象の各プロダクトに関する設定項目を表示するページで確認できる。

*3:Xcodeプロジェクトのinfo.plistに設定されているBundle IDとして、iOS Provisioning Portalで作成した正しいApp IDが設定されているか。

*4:SKProductRequestに設定するプロダクトIDが正しいか。実際にSKProductsRequestオブジェクトの初期化で使用しているプロダクトIDと、iTunes Connectでプロダクトごとに設定しているIDが完全に一致しているか。

*5:iTunes Connectに新規プロダクトを追加してからそれが反映されるまでには時間がかかる。

*6:iTunes Connectの「Contracts, Tax, and Banking」での設定が不十分である場合には課金対象プロダクトが無効扱いになる。