IAPを設定しようとしていますが、SKProductsRequestを使用して製品を取得する呼び出しを行った後、デリゲート内のSKProductsResponse配列のカウントは0です。ここにチェックリストがあります。
フェッチされた製品数がゼロである理由に関する他の提案はありますか?
これがコーディングの問題になるとは思わないが、とにかくここにある:
…
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);
}
}
以下のリストの3つのすべてを確認してください
1)製品IDを確認します-コードおよびiTunes Connectにあるものと正確に同じでなければなりません-> My Apps-> YourAppName-> Features-> In-App Purchases 2)iTunes Connect->契約、税金、銀行->マスター契約->有料アプリケーション->連絡先情報/銀行情報/税情報(記入する必要があります) 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)
}
}
}
私は同じ問題に直面していましたが、製品名の前にバンドル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"]];
[機能]セクションでIn-App Purchaseがオンになっていることを確認します。そうしないと、SKProductsRequestは0個の製品を返します。
私は同じ問題を抱えていました...
ITunesのバンドル識別子と一致しないバンドル識別子を変更するだけです。
そして、私のアプリはうまく動作します:)
これを見落としている可能性がありますが、製品識別子の一致では大文字と小文字が区別されます。
したがって、Appleにsayという識別子を付けて製品を作成した場合、
com.yourcompany.product1
プロダクト識別子を指定してプロダクトリクエストを呼び出します
com.yourcompany.Product1
リストは製品なしで返されます。
これはしばらく私を忙しくさせた:-)
ps:別のプロジェクトで、SKProductsRequestは再起動後にのみ製品を返し始めたことがわかりました。したがって、他のすべてが失敗した場合は、Macを再起動してください。
IOSの[設定]> [iTunesとApp Store]およびログアウトに進みましょう
これがあなたを助けることを願って、私はなぜか分からない:D
時には、これらのタイプの問題に対する非常に効果的な解決策があります。いくつかの調査を行った後、アプリを削除してから再度インストールすると役立つ場合があることがわかりました( アプリ内購入、SKProductsRequestが0を返す-まだレビュー中の製品 )また、使用しているiOSのバージョン?
また、iTunesConnectで製品の価格を設定しているかどうかも確認してください。それを見逃して製品がゼロでした。
私の場合、それはバグでした。シミュレーターでは、すべての製品IDが失敗し、無効としてマークされました。実際のデバイスでは、すべての製品リクエストが正常に製品を取得しました。
TvOS 4K
たくさん掘り下げた後、次の手順でSKProductsRequestの製品が0になる問題を解決しました。
IOSデバイスで[設定]> [iPhoneにサインイン]に移動します。元のApple IDで既にログインしている場合は、それをタップしてSign Outを選択します。次に、作成したサンドボックステスターの資格情報でサインインしますiTunes Connectで。
somemacOS 10.14システムで空のSKProductsResponse.products
配列を取得していますが、他のものはうまく動作し、現在のIAPの有効なリストを返しますアプリ。
同じアプリ、同一のコード。
ユーザーは両方のマシンで同じApp Storeアカウントにログインしました。
それはただ奇妙なことです。
また、有料アプリケーション契約に同意するだけでは十分ではないことに注意してください。また、その契約の連絡先、銀行、税に関する情報を記入する必要があります。