web-dev-qa-db-ja.com

iPhone StoreKit-無効な製品ID

サンドボックス環境でアプリ内購入をテストしようとしています。

コードをテストするために、次のことを行いました。

  1. ITunes Connectの「ユーザーの管理」の下にアプリ内購入テストユーザーアカウントを作成しました

  2. 「アプリ内購入の管理」でアプリ内購入製品をいくつか作成しました。プロダクトIDには数値と英数字を使用しました。

  3. アプリをiPhoneに読み込み、[設定]-> [ストア]に移動して、通常のストアからログアウトし、手順1で作成したテストアカウントにログインしました。

  4. void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)responseコールバックにブレークポイントを設定します

送信されたすべての製品IDはresponse.invalidProductIdentifiersプロパティ。リクエストを送信するとき、最初にステップ2で作成した正確な製品IDを試しました。また、バンドルIDをプレフィックスとして付けました。

NSString *id2 = @"com.super.duper.8";
NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productList];

明らかなものがないのですか?どんな助けでもありがたいです。

アキム

34
Achim

それでも無効な製品IDを取得している場合、私はさまざまな原因のすべてのチェックリストを蓄積してきました。

http://troybrant.net/blog/2010/01/invalid-product-ids/

54
Troy Brant

私はすべてのproductsRequest(AppIDの)に苦労して2日間費やしましたが、response.productsリストではなく、response.invalidProductIdentifiersリストで終了しました。 Apple彼らのストアキットを扱う際に間違いなくFグレードの仕事をしました。それは混乱し、絡み合い、複雑です。

ようやく解決しました。フォーラムで数少ないことからわかるように、私が学んだ非常に重要な1つの教訓:itunesconnect.Apple.comで入力した内容が反映されるまでには、数時間かかる場合があります。

2つの部分があります。xcodeのアプリケーション名とAppID、およびitunesconnectionに入力したものです。これらは正確に一致する必要があります(大文字と小文字を区別)。アプリ内AppleIDを登録または変更した場合(このアクションを実行しないと購入アクションが機能しないことが示唆されているように、すべての契約と銀行情報を完了しました)、再度テストする前に就寝することもできます。私の場合、影響を与えるのに本当に何時間もかかるからです。 9歳の私が就寝時間の話に誘われてから目が覚めたときに問題が消えたことに驚いた前に、私はこの問題にとても苛立っていました。

Eddy71の提案を http://www.iphonedevsdk.com/forum/iphone-sdk-development/21035-problems-creating-test-user-app-purchase.html で見つけました。それを解決する前に、Eddyのチェックリストでできることはすべてやったが、製品がゼロのままだった。私の不安の1つは、itunesconnectでアプリケーション登録を完了するためにバイナリコードをアップロードしなくても大丈夫だったかどうかでした。 http://blog.mugunthkumar.com/coding/iphone-tutorial-%E2%80%93-in-app-purchases/ )。それは確かに大丈夫です。 「販売済み」がチェックされており、アイコンが緑色になっていることを確認してください(フォームに入力した後で承認するには、追加の手順が必要です)。もう1つの懸念は、デバッグモードで開発者の暫定(配布の暫定ではない)を使用できるかどうかも問題ありません。これがあなたの一部に役立つことを願っています。幸運と信仰を持っています。最終的には機能します。

15
Wayne Lo

私たちの問題は、AppleのFAQの最後の箇条書きでした、「 なぜ私の製品IDがinvalidProductIdentifiers配列で返されるのですか? ":

  • すべての財務要件を完了していません(このドキュメントの「契約、税金、銀行情報」セクションを参照してください)。
  • 明示的なアプリIDを使用していません。
  • 明示的なアプリIDに関連付けられているプロビジョニングプロファイルを使用していません。
  • コードで正しい製品識別子を使用していません。製品IDの詳細については、テクニカルQ&A、QA1329、「アプリ内購入の製品ID」を参照してください。
  • ITunes Connectで販売中のIn App Purchase製品をクリアしませんでした。
  • 製品を変更した可能性がありますが、これらの変更はまだすべてのApp Storeサーバーで利用できません。
  • あなたまたはApp ReviewがiTunes Connectで最新のバイナリを拒否した場合

ITunes Connectの「バイナリをアップロードする準備ができました」をクリックして、最新バージョン(拒否されていた)を「アップロードを待機しています」に変更し、約10分後に問題が解決しました。

8
Phil Calvin

電話がジェイルブレイクされていても問題ありません。CydiaでappSyncをアンインストールするだけで機能します。

5
Kulitorum

Appleには、よく知られていない素晴らしいドキュメントがあり、これを最後にカバーしています。また、役に立たないものについての神話を一掃します(例:バイナリーの送信)。

Technote 2259「iOSおよびMacアプリケーションへのアプリ内購入の追加」

4
Jesse Rusak

IPhone設定をリセットして、iPhoneからアプリを削除し、バンドルIDなしでリクエスト製品IDを直接使用してみてください

3
osama ali

最終的に新しいプロビジョニングプロファイルを作成しました。プロビジョニングプロファイルでアプリ購入を有効にする必要があることを示す行がどこかにありました(アプリ購入用のドキュメントにはありません)。既存のプロファイルではこれを行うことができなかったため、新しいプロファイルを作成してから有効にすることができました。

3
Achim

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

分かりますよね?まあ、既存のアプリケーションのアップデートを扱っている場合、デバイスはそれをApp Storeでインストールされたアプリとして扱います。

そのため、デバイスからアプリを削除します。次に、デバイスをMacにテザリングしてビルド&ランを使用して、アプリをデバイスに再度インストールします。それは今動作するはずです:)

2
Héctor Ramos

私の場合、銀行情報、税務情報、連絡先情報を記入していませんでした。これを完了すると、productIDを取得できます。これが誰かの役に立つことを願っています。

2
Randall Wang

これらの問題を抱えている他の人には、Appleフォーラムの this thread を読むことを強くお勧めします。

2
William Denniss

私にとっての問題は、アプリ内購入を設定するときに「コンテンツホスティングをオンにする」を選択したことでした。だから私はそれをオフにする必要があり、問題は解決しました。

1
Dogahe

@ 8って何?あなたの製品はcom.super.duper.8という名前ですよね?

http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/

1
Mugunth

これはあなたが間違っているところです、あなたはコードでこれを必要とします:

NSSet *productList = [NSSet setWithObjects:product id]

この製品IDはiTunes接続から取得できます。

また、テストユーザーを作成し、元のiTunesアカウントからサインアウトしていることを確認する必要があります。 Appleのドキュメントに記載されている内容に関係なく、ポップアップが表示されたらそれを使用してください)、テストユーザーアカウントでサインインしないでください。

1
Vibhor Goyal

もう1つの問題は、Xcodeで[ウィンドウ]> [オーガナイザー]に移動し、アプリとプロビジョニングプロファイルを削除して、開発プロビジョニングプロファイルを再度追加する必要があったことです。追加の手段として、デバイスとxcodeを再起動しました。

1
Banjer

私はインターネットで利用可能なすべてのソリューションを試しましたが、何も機能しませんでした。私の問題:デバイスが脱獄していて、Cydiaがインストールされていました。デバイスを工場出荷時のデフォルト(ジェイルブレイクされていない)に復元しましたが、最初に動作し、問題なく製品IDを返しました。

1
Greg Richards

みんなが話していることをすべて試しました。私は最初にゲストIDを作成して、製品IDが見つかるかどうかを確認しました。それで、私はアクティビティモニターのすべてをやめ始めて、問題を見つけました。以下の「保存」プロセスを終了する必要がありました。突然、無効な製品IDを取得できなくなりました。それが誰かを助けることを願っています。

Quit these if you're getting the invalid product id null error

0
Jim Bak

ストアが製品をすべてのサーバーで使用できるようにするまでには時間がかかります(ドキュメントを参照)。そのため、デバイスでテストするときに、iTunes Connectで製品を作成してから、その製品IDが有効なものとして表示されるまでに遅延が発生する場合があります。私の場合、製品が表示されるまでに約12時間かかりました。

0
sliver

正確な理由はわかりませんが、リクエストの製品IDを「com.mycompany.myapp.product」から「product」に変更すると機能し始めました。多分それは私がiTunes Connectで製品をどのように構成したかによるものです。

それを試してみてください、あなたのために働くかもしれません...

0
cdstamper

かもしれない別の問題。 xCodeプロジェクトの名前が英語で書かれていない場合、または他の文字が含まれている場合、バンドルIDには、アプリの名前があるはずの場所に「------」が含まれます。これをxCodeに含めることは、バンドルIDの単なる慣例だと思いました。結局のところ、これは私の問題だったので、xCodeプロジェクトに英語で名前を付けてください)私はこれがほとんどの場合に当てはまらないことを知っていますが、とにかく)

0
sermilion

アプリのデータを保持したいが、アプリを削除してこの問題を修正したい場合は、まずデバイスを同期してください。次に、アプリを削除してXcodeから再インストールします。これで問題が解決しました。デバイスが動作したら、バックアップからデバイスを復元できます。これには数分しかかかりませんが、復元後も製品リクエストは機能します。

0
arlomedia

交換:

NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

と:

NSSet *productList = [NSSet setWithObjects:@"8", nil];
0
user2412679

その他の注意事項:製品IDにはNSMutableSetを使用しないでください。 NSSetである必要があります!

0
Jeremy