5

わかりました、私はこれで髪を引き裂いています。無料になるアプリを開発しています (広告といくつかのロックダウン機能付き)。アプリ内購入により、広告が削除され、完全な機能が提供されます。

そこで、製品 ID (com.mydomain.Myapp.fullversion) を渡して SKProductsRequest をセットアップし、'start' を実行します。これは失敗せず、productsRequest:didReceiveResponse: の呼び出しに進みます。ここで、NSLog はresponse.products.count がゼロに等しいことを示しています。問題です!

だから、まず愚かな質問。

Q1. テスト デバイスで Xcode を介してアプリを実行する場合、テスト デバイスはインターネットに接続する必要がありますか (ワイヤレス ON など)、または Xcode を実行している Mac がインターネットに接続されていれば十分ですか? (回答: テスト デバイスに接続する必要があります)。

Q2.これを機能させるにはどうすればよいですか?

以下のすべてを確認しました。

アプリ ID のアプリ内購入を有効にしましたか?:
プロビジョニング ポータルのアプリ ID の下に「bundle_seed_id.com.mydomain.Myapp」があり、「アプリ内購入」が有効になっています。

製品の Cleared for Sale を確認しましたか?:
iTunes Connect でアプリ内購入 'com.mydomain.Myapp.fullversion' を作成しましたが、販売が許可されています。

プロジェクトの .plist バンドル ID はアプリ ID と一致しますか?:
はい、「com.mydomain.Myapp」に設定されています。

新しいアプリ ID の新しいプロビジョニング プロファイルを生成してインストールしましたか?:
はい、「com.mydomain.Myapp」の PP を作成してインストールしました。

この新しいプロビジョニング プロファイルを使用してコード署名するようにプロジェクトを構成しましたか?:
「コード署名 ID」の下にエントリしかありません (CS 資格、CS リソース ルール パス、およびその他の CS フラグはありません)。Automatic Profile Selector > IPhone Developer で設定され、Myapp に自分自身と一致し、Debug > Any SDK および Release > Any iOS SDK に設定されています。

SKProductRequest を作成するときに完全な製品 ID を使用していますか?:
はい、「com.mydomain.Myapp.fullversion」を使用しています。

製品を iTunes Connect に追加してから数時間待ちましたか?:
はい、24 時間待ちました。

銀行の詳細は iTunes Connect で有効ですか?:
はい、有効です。

デバイスからアプリを削除して再インストールしようとしましたか?:
何度も。

ここでの観察: テスト デバイスでは、「iTunes & App Stores」にログインしていません。テスト デバイスで Xcode からアプリを実行すると、ログインするように求められません (テスト ユーザーがセットアップされています)。 iTunes Connect ですぐに使用できます)。したがって、アプリが実行され、SKProductRequest で呼び出しが開始されますが、「iTunes & App Stores」にログインするように求められることはありません。

よろしくお願いします。誰かがアプリ内購入を機能させるのを手伝ってくれることを願っています. バイロン。

更新 1:ここにいくつかのコードがありますが、それがどれだけ役立つかはわかりません。上で述べたように、productsRequest:didReceiveResponse: で製品を返さないことで失敗しています。

最初に私は電話します:

[[MyappIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products)
     {
         if (success)
         {
             NSLog(@"SUCCESS - WE HAVE PRODUCTS");

             _products = products;

             NSLog(@"_products.count = %d", _products.count);
         }
         else
         {
             if(products == nil)
             {
                 NSLog(@"FAILED - WE HAVE NO PRODUCTS");
             }
         }
     }];

そのためのコードは次のようになります。

- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler
{
    _completionHandler = [completionHandler copy];

    NSLog(@"IAPHelper, requestProductsWithCompletionHandler{}, _productIdentifiers = %@", [_productIdentifiers anyObject]);

    _productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers];
    _productsRequest.delegate = self;
    [_productsRequest start];

}

「開始」は失敗せず、productsRequest:didReceiveResponse の呼び出しに進みます。

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

{

NSLog(@"Loading list of products...");

NSLog(@"iAPHelper, productRequest:didRecieveResponse{}, Products count = %d", response.products.count);

そして、この関数に入るとすぐに、response.products.count がゼロに等しいため失敗しました。

次のデバッグ コードを productRequest:didRecieveResponse{} に追加しました。

for (NSString *invalidProductId in response.invalidProductIdentifiers)
{
    NSLog(@"Invalid product id: %@" , invalidProductId);
}

そして、「com.mydomain.Myapp.fullversion」は無効であると述べています。

更新 2:これはもはや冗談ではありません。まだ機能していません!

http://developer.apple.com/library/ios/#technotes/tn2259/_index.htmlを正確にフォローしました。アプリ内購入を作成するときにスクリーンショットをアップロードしたことが問題である可能性があると思いましたが、アプリ内購入を削除し、「スクリーンショットを待機中」の状態であることを確認して再作成することで修正しましたドキュメントに従って。再作成されたアプリ内購入が Apple のサーバーを通過するのを 12 時間以上待ちました。テスト デバイスからアプリを削除しました。テストデバイスでストアからログアウトしていることを確認しました。テストデバイスを再起動しました。Xcode で「クリーン」を実行し、Xcode を再起動しました。Xcode からアプリを実行して、何を推測しますか? 製品 ID が無効です!!!! 助けてください、誰かお願いします、私は頭がおかしくなっています!!!!!

4

2 に答える 2

6

問題が解決しました

TSI を提起した後、Apple の担当者はついに私の問題を発見しました。

iTunes Connect でアプリを見ると、バンドル ID が「Myapp」であると表示されます。アプリ内購入が有効になっているプロビジョニング ポータルのアプリ ID は「bundle_seed_id.com.mydomain.Myapp」でした。明らかではなかったこと、または少なくとも私にとっては、このアプリ ID が、iTunes Connect のアプリのバンドル ID と一致する必要があるバンドル ID で構成されていることです。

プロビジョニング ポータルで作成した最初のアプリ ID は、ワイルドカードのアプリ ID でした。新しいアプリケーションを作成するプロセスを進めるとき、プロビジョニング ポータルのアプリ ID から入力されたドロップダウン リストから選択したバンドル ID を入力する必要があります。ワイルドカードを含むバンドル ID を選択すると、バンドル ID サフィックスを要求されます。これは、「Myapp」と入力した場所であり、「Myapp」がバンドル ID になります。ただの接尾辞だと思ったので少し奇妙です。

その後 (数か月後)、アプリ内購入を実装したいと決めたとき、プッシュ通知またはアプリ内購入ではワイルドカードのアプリ ID を使用できないことがわかりました。そのため、Provisioning Portal で新しいアプリ ID を作成し、「アプリ ID のバンドル ID 部分に逆ドメイン名スタイルの文字列を使用することをお勧めします」というプロンプトに従って、「 com.mydomain.Myapp'. アプリ ID 用に作成していたバンドル ID が、iTunes Connect で以前に作成したアプリケーションのバンドル ID と一致する必要があることを知りませんでした。

プロビジョニング ポータルで「bundle_seed_id.Myapp」の新しいアプリ ID を作成しました。「com.mydomain.Myapp.fullversion」の製品 ID は無効ではなくなり、機能しているように見えます。

于 2013-02-13T03:27:13.147 に答える
1

A1. テストデバイスでの接続が必要です

A2. コードを投稿する

于 2013-02-06T09:34:18.703 に答える