サンドボックス環境でアプリ内購入をテストしようとしています。
コードをテストするために、次のことを行いました。
ITunes Connectの「ユーザーの管理」の下にアプリ内購入テストユーザーアカウントを作成しました
「アプリ内購入の管理」でアプリ内購入製品をいくつか作成しました。プロダクトIDには数値と英数字を使用しました。
アプリをiPhoneに読み込み、[設定]-> [ストア]に移動して、通常のストアからログアウトし、手順1で作成したテストアカウントにログインしました。
(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];
明らかなものがないのですか?どんな助けでもありがたいです。
アキム
それでも無効な製品IDを取得している場合、私はさまざまな原因のすべてのチェックリストを蓄積してきました。
私はすべての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つの懸念は、デバッグモードで開発者の暫定(配布の暫定ではない)を使用できるかどうかも問題ありません。これがあなたの一部に役立つことを願っています。幸運と信仰を持っています。最終的には機能します。
私たちの問題は、AppleのFAQの最後の箇条書きでした、「 なぜ私の製品IDがinvalidProductIdentifiers
配列で返されるのですか? ":
ITunes Connectの「バイナリをアップロードする準備ができました」をクリックして、最新バージョン(拒否されていた)を「アップロードを待機しています」に変更し、約10分後に問題が解決しました。
電話がジェイルブレイクされていても問題ありません。CydiaでappSyncをアンインストールするだけで機能します。
Appleには、よく知られていない素晴らしいドキュメントがあり、これを最後にカバーしています。また、役に立たないものについての神話を一掃します(例:バイナリーの送信)。
IPhone設定をリセットして、iPhoneからアプリを削除し、バンドルIDなしでリクエスト製品IDを直接使用してみてください
最終的に新しいプロビジョニングプロファイルを作成しました。プロビジョニングプロファイルでアプリ購入を有効にする必要があることを示す行がどこかにありました(アプリ購入用のドキュメントにはありません)。既存のプロファイルではこれを行うことができなかったため、新しいプロファイルを作成してから有効にすることができました。
Appleフォーラムとここで提案されたすべてを試しても、まだ機能しませんでした。解決策が見つかりました-サンドボックスを有効にするには、アプリをXcodeで転送する必要があります。
分かりますよね?まあ、既存のアプリケーションのアップデートを扱っている場合、デバイスはそれをApp Storeでインストールされたアプリとして扱います。
そのため、デバイスからアプリを削除します。次に、デバイスをMacにテザリングしてビルド&ランを使用して、アプリをデバイスに再度インストールします。それは今動作するはずです:)
私の場合、銀行情報、税務情報、連絡先情報を記入していませんでした。これを完了すると、productIDを取得できます。これが誰かの役に立つことを願っています。
これらの問題を抱えている他の人には、Appleフォーラムの this thread を読むことを強くお勧めします。
私にとっての問題は、アプリ内購入を設定するときに「コンテンツホスティングをオンにする」を選択したことでした。だから私はそれをオフにする必要があり、問題は解決しました。
@ 8って何?あなたの製品はcom.super.duper.8という名前ですよね?
http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/
これはあなたが間違っているところです、あなたはコードでこれを必要とします:
NSSet *productList = [NSSet setWithObjects:product id]
この製品IDはiTunes接続から取得できます。
また、テストユーザーを作成し、元のiTunesアカウントからサインアウトしていることを確認する必要があります。 Appleのドキュメントに記載されている内容に関係なく、ポップアップが表示されたらそれを使用してください)、テストユーザーアカウントでサインインしないでください。
もう1つの問題は、Xcodeで[ウィンドウ]> [オーガナイザー]に移動し、アプリとプロビジョニングプロファイルを削除して、開発プロビジョニングプロファイルを再度追加する必要があったことです。追加の手段として、デバイスとxcodeを再起動しました。
私はインターネットで利用可能なすべてのソリューションを試しましたが、何も機能しませんでした。私の問題:デバイスが脱獄していて、Cydiaがインストールされていました。デバイスを工場出荷時のデフォルト(ジェイルブレイクされていない)に復元しましたが、最初に動作し、問題なく製品IDを返しました。
ストアが製品をすべてのサーバーで使用できるようにするまでには時間がかかります(ドキュメントを参照)。そのため、デバイスでテストするときに、iTunes Connectで製品を作成してから、その製品IDが有効なものとして表示されるまでに遅延が発生する場合があります。私の場合、製品が表示されるまでに約12時間かかりました。
正確な理由はわかりませんが、リクエストの製品IDを「com.mycompany.myapp.product」から「product」に変更すると機能し始めました。多分それは私がiTunes Connectで製品をどのように構成したかによるものです。
それを試してみてください、あなたのために働くかもしれません...
かもしれない別の問題。 xCodeプロジェクトの名前が英語で書かれていない場合、または他の文字が含まれている場合、バンドルIDには、アプリの名前があるはずの場所に「------」が含まれます。これをxCodeに含めることは、バンドルIDの単なる慣例だと思いました。結局のところ、これは私の問題だったので、xCodeプロジェクトに英語で名前を付けてください)私はこれがほとんどの場合に当てはまらないことを知っていますが、とにかく)
アプリのデータを保持したいが、アプリを削除してこの問題を修正したい場合は、まずデバイスを同期してください。次に、アプリを削除してXcodeから再インストールします。これで問題が解決しました。デバイスが動作したら、バックアップからデバイスを復元できます。これには数分しかかかりませんが、復元後も製品リクエストは機能します。
交換:
NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];
と:
NSSet *productList = [NSSet setWithObjects:@"8", nil];
その他の注意事項:製品IDにはNSMutableSetを使用しないでください。 NSSetである必要があります!