質問

iPhoneでIn App Purchasesをテストしようとしていますが、<!> quot; didRecieveResponse <!> quot;で無効な製品IDとして返された製品IDが返されるという問題が発生します。メソッド。

私は持っています:

  • このアプリに関連付けられた店内製品を作成しました。バンドルIDは他のすべてと一致します。販売が許可され、開発者によって承認されました。
  • 新しいプロビジョニングプロファイルでストアアプリの購入が有効になっており、完全なアプリ名があることを確認します:<!> quot; com.domain.appname <!> quot;
  • これがアプリを私のiPhoneに署名するために使用されているプロビジョニングプロファイルであることを確認します。
  • <!> quot; com.domain.appname <!> quot;は、プロビジョニングプロファイルの作成に使用されるアプリIDです。
  • <!> quot; com.domain.appname <!> quot; plistファイルでバンドル識別子として使用されます。

すべてが整っているように見えますが、無効なIDとして製品が返されます。

これは私が使用しているコードです:


- (void)requestProductData {
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   {
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   }

   for(int i = 0; i  < myProducts.count; ++i)
   {
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   }

   [request autorelease];
}

すべての製品IDは無効なプリントアウトに表示され、それらのどれも<!> quot; Product Info:<!> quot;には表示されません。プリントアウト。

ご提案は大歓迎です...

PSはい、Objective-c / c ++として構築されています。

役に立ちましたか?

解決 7

OK、だから私が考え得るすべてのことをして、そこにあるすべてのフォーラムを読んだ後、ここでうまくいった:

すべてをやり直します。

  1. Xcode Organizerからすべてのプロビジョニングプロファイルを削除します。
  2. Xcodeを閉じます。
  3. 新しいアプリIDを作成します。
  4. 新しいApp IDで新しいプロビジョニングプロファイルを作成します。
  5. 新しいアプリIDで新しい配布プロビジョニングプロファイルを作成します。
  6. iTunes Connectで新しいアプリを作成
  7. Xcodeを起動し、2つの新しいプロビジョニングプロファイルをインストールします。一致するようにyoruバンドルIDを更新します。また、アプリがリクエストするID文字列が、バンドルIDを反映するように更新されていることを確認してください。
  8. 新しい配布プロビジョニングプロファイルを使用して、配布モードでプロジェクトをビルドします。
  9. 新しいバイナリをアップロードします。 (拒否しないでください)
  10. テスト用のアプリ内購入を設定します。
  11. 新しいプロビジョニングプロファイルを使用して、デバッグモードでプロジェクトをビルドします。
  12. テストリクエスト。

これは私の店を機能させるために必要なことです。私の最善の推測は、Appleバックエンドサーバーが時々台無しになり、最初から始める必要があることです。

これがすべての人に役立つことを願っています!

他のヒント

私はAppleフォーラムやここで提案されているすべてを試しましたが、それでも動作させることができませんでした。ソリューションが見つかりました-サンドボックスを有効にするには、アプリをXcodeで転送する必要があります。

当然ですね。まあ、既存のアカウントの更新を使用している場合、デバイスは引き続きApp Storeでインストールされたアプリとして扱います。

削除してから、再度転送します。今すぐ動作するはずです:)

テスト中のiPhoneでアプリを削除し、再インストールした。また、アプリ内購入アイテムを送信してから8時間も待機していました。

以下の手順を実行してください:

  1. 開発者アカウントを使用してiTunes Connectにログインします( https:// itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/ )。

  2. タブに移動- <!> quot;契約、税金、銀行業務<!> quot;

  3. 「リクエスト契約」および「プロセスの契約」セクションを確認します。

  4. <!> quot; iOS有料アプリケーション<!> quot; を確認し、連絡先情報、銀行情報、税務情報を設定する必要があります。

  5. <!> quot; iOS有料アプリケーション<!> quot;セルが[効果]セクションの[契約]に移動し、アプリ購入で製品を使用できるようになります。

詳細については、以下のリンクをご覧ください。 http://developer.apple.com/library/ios/#technotes /tn2259/_index.html

iPhoneがジェイルブレイクされると、 AppSync パケットがアプリ内課金テストを完全に中断することに注意してください。 AppSyncは、依存関係としてInstall0usでインストールされます。

iOSを完全に復元する必要はありません。 CydiaでAppSyncをアンインストールするだけで、アプリ内購入をテストできます

Fixindの「無効な製品」に関するすべてのフォーラム、チュートリアル、およびコメントのすべてのヒントは、AppSyncを削除するまで機能しませんでした。

新しいアプリ(v1.0はまだリリースされていません)でも、アプリの購入に追加しようとしていた同様の問題がありました。すべてを設定し、製品を追加しました。SKProductsRequestを実行したときに、製品が常に無効として返されました。

Apple開発者フォーラムで接線関連の投稿を見たとき、プロセス全体をあきらめようとしていました。テストデバイスからアプリを削除し、新しいビルドとインストールを実行することを提案しました。それでうまくいきました。

確かに、同じトラブルを引き起こしている別のデバイスで試してみましたが、そこでも修正されました。

単なる推測ですが、IAPを追加する前に作成されたプロビジョニングプロファイルで作成されたビルドがデバイスにある場合、そのビルドを削除し、IAPを使用して新しいビルドを配置する必要があると思いますプロフィール。 (つまり、所定の場所にアプリを置き換えるだけでは、トリックは行われません。)

コードに問題がなければ、 いつか無効なproductIdを返しました その理由は、情報の変更に10時間以上かかる場合があるためです。有効になります。 または、デバイスに何か問題が残っているため、productIdが無効です。そのため、アプリを削除してもう一度ビルドし、再構築できます。 私の経験では、 役に立てば幸いです。

IAPのiTunes Connectインターフェイスが最近更新され、Invalidが発生する可能性があります:<!> lt;製品ID <!> gt;エラー。

価格を設定せずにiTunes接続でIAPを追加できるようになりました。デフォルトではUSD 0に設定されており、そのエントリを保存できます。

前に価格フィールドを編集しなかった場合、保存のボタンを押すと、UIの古いバージョンは文句を言います。

このフィールドを完全に見逃すことは非常に簡単であり、iOS呼び出しを介してその製品IDを使用して情報を取得しようとすると、Invalid:<!> lt;製品ID <!> gt; <!> lt;が見つかったと言うのではなく、製品ID <!> gt;米ドル0で販売。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top