4

iPhone でアプリ内購入をテストしようとしていますが、情報を要求した製品 ID が「didRecieveResponse」メソッドで無効な製品 ID として返されるという問題が発生しています。

私は持っている:

  • このアプリに関連付けられたストア製品を作成しました。バンドル ID は他のすべてと一致します。販売が許可され、開発者によって承認されました。
  • 新しいプロビジョニング プロファイルでストア アプリの購入が有効になっていて、アプリの完全な名前が「com.domain.appname」であることを確認しました。
  • これが、アプリを iPhone に署名するために使用されているプロビジョニング プロファイルであることを確認しました。
  • 「com.domain.appname」がプロビジョニング プロファイルの作成に使用されるアプリ ID であることを確認しました。
  • 「com.domain.appname」がバンドル識別子として 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 が無効なプリントアウトに表示され、"Product Info:" プリントアウトにはどれも表示されません。

どんな提案でも大歓迎です...

PS はい、これは Objective-c/c++ としてビルドされています。

4

8 に答える 8

6

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

明らかですよね?既存のアカウントの更新を行っている場合でも、デバイスはそれを App Store にインストールされたアプリとして扱います。

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

于 2010-04-30T01:51:26.717 に答える
4

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

于 2011-05-06T19:23:09.960 に答える
3

以下の手順に従ってください。

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

  2. タブに移動します - 「契約、税金、および銀行」

  3. リクエスト契約と処理中の契約セクションを確認してください。

  4. 「iOS有料アプリケーション」をチェックしてください。連絡先情報、銀行情報、税情報を設定する必要があります。

  5. 「iOS 有料アプリケーション」セルが有効な契約セクションに移動すると、App Purchase で製品を使用できるようになります。

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

于 2011-08-23T11:00:44.537 に答える
2

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

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

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

于 2012-02-22T11:39:51.763 に答える
1

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

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

念のため、同じ問題を抱えていた別のデバイスで試してみたところ、そこでも修正されました.

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

于 2011-01-09T00:56:35.437 に答える
1

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

于 2011-01-24T02:17:59.330 に答える
0

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

すべてをやり直してください。

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

これが、私の店を機能させるために必要なことです。私の推測では、Apple のバックエンド サーバーが時々故障するので、最初からやり直す必要があると思います。

これがみんなに役立つことを願っています!

于 2009-10-31T00:19:22.143 に答える