web-dev-qa-db-ja.com

SKProductsRequestが0個の製品を返す理由

IAPを設定しようとしていますが、SKProductsRequestを使用して製品を取得する呼び出しを行った後、デリゲート内のSKProductsResponse配列のカウントは0です。ここにチェックリストがあります。

  • テスト製品がiTunes Connectに追加されました
  • 製品のバンドルIDはアプリのバンドルIDと一致します(ワイルドカードを使用していません)
  • SKProductRequestで設定された製品識別子は、iTunes接続で作成された製品と一致します
  • ITunes Connectで製品が作成されてから数時間待った
  • プロビジョニングプロファイルはIAPを有効にします
  • http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/ などのようなさまざまなチュートリアルのすべての手順に従いました。
  • デバイスからアプリを削除し、Xcodeを再起動し、再構築したなど。

フェッチされた製品数がゼロである理由に関する他の提案はありますか?

これがコーディングの問題になるとは思わないが、とにかくここにある:

…

        NSSet *productIdentifiers = [NSSet setWithObjects:@"redacted", nil];
        self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
        self.productsRequest.delegate = self;
        [self.productsRequest start];

…
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *products = response.products;
    NSLog(@"Product count: %d", [products count]);
    for (SKProduct *product in products)
    {
        NSLog(@"Product: %@ %@ %f", product.productIdentifier, product.localizedTitle, product.price.floatValue);
    }
}
46
Gruntcakes

以下のリストの3つのすべてを確認してください
1)製品IDを確認します-コードおよびiTunes Connectにあるものと正確に同じでなければなりません-> My Apps-> YourAppName-> Features-> In-App Purchases enter image description here 2)iTunes Connect->契約、税金、銀行->マスター契約->有料アプリケーション->連絡先情報/銀行情報/税情報(記入する必要があります) enter image description here 3)テストするコード

class ViewController: UIViewController {

    var requestProd = SKProductsRequest()
    var products = [SKProduct]()

    override func viewDidLoad() {
        super.viewDidLoad()

        validateProductIdentifiers()
    }
}

extension ViewController: SKProductsRequestDelegate {

    func validateProductIdentifiers() {
        let productsRequest = SKProductsRequest(productIdentifiers: Set(["candy100", "someOtherProductId"]))

        // Keep a strong reference to the request.
        self.requestProd = productsRequest;
        productsRequest.delegate = self
        productsRequest.start()
    }

    // SKProductsRequestDelegate protocol method
    public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {

        self.products = response.products

        for invalidIdentifier in response.invalidProductIdentifiers {
            print(invalidIdentifier)
        }

    }
}
28
ua24

私は同じ問題に直面していましたが、製品名の前にバンドルIDではなくIAP製品名のみを送信して解決しました。以下に例を示します。

動作SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"my_product"]];

のではなく

機能しないSKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.my_site.my_app.my_product"]];

13
Ahsan Ebrahim

[機能]セクションでIn-App Purchaseがオンになっていることを確認します。そうしないと、SKProductsRequestは0個の製品を返します。

11
Harris

私は同じ問題を抱えていました...

ITunesのバンドル識別子と一致しないバンドル識別子を変更するだけです。

そして、私のアプリはうまく動作します:)

9
Vishal16

これを見落としている可能性がありますが、製品識別子の一致では大文字と小文字が区別されます。

したがって、Appleにsayという識別子を付けて製品を作成した場合、

com.yourcompany.product1

プロダクト識別子を指定してプロダクトリクエストを呼び出します

com.yourcompany.Product1

リストは製品なしで返されます。

これはしばらく私を忙しくさせた:-)

ps:別のプロジェクトで、SKProductsRequestは再起動後にのみ製品を返し始めたことがわかりました。したがって、他のすべてが失敗した場合は、Macを再起動してください。

6
nspire

IOSの[設定]> [iTunesとApp Store]およびログアウトに進みましょう

これがあなたを助けることを願って、私はなぜか分からない:D

2
Tai Le

最初の回答

契約、銀行などの情報を設定しましたか?

正解

私はこれについて間違っているようです。 アプリ内購入、SKProductsRequestが0を返す-製品はまだレビュー中です をご覧ください

1
marco alves

時には、これらのタイプの問題に対する非常に効果的な解決策があります。いくつかの調査を行った後、アプリを削除してから再度インストールすると役立つ場合があることがわかりました( アプリ内購入、SKProductsRequestが0を返す-まだレビュー中の製品 )また、使用しているiOSのバージョン?

1
virindh

また、iTunesConnectで製品の価格を設定しているかどうかも確認してください。それを見逃して製品がゼロでした。

1
Desert Rose

私の場合、それはバグでした。シミュレーターでは、すべての製品IDが失敗し、無効としてマークされました。実際のデバイスでは、すべての製品リクエストが正常に製品を取得しました。

TvOS 4K

0
Nik Kov

たくさん掘り下げた後、次の手順でSKProductsRequestの製品が0になる問題を解決しました。

IOSデバイスで[設定]> [iPhoneにサインイン]に移動します。元のApple IDで既にログインしている場合は、それをタップしてSign Outを選択します。次に、作成したサンドボックステスターの資格情報でサインインしますiTunes Connectで。

0
Maverick

somemacOS 10.14システムで空のSKProductsResponse.products配列を取得していますが、他のものはうまく動作し、現在のIAPの有効なリストを返しますアプリ。

同じアプリ、同一のコード。
ユーザーは両方のマシンで同じApp Storeアカウントにログインしました。

それはただ奇妙なことです。

0
ATV

また、有料アプリケーション契約に同意するだけでは十分ではないことに注意してください。また、その契約の連絡先、銀行、税に関する情報を記入する必要があります。

0
Matjan