2017-09-19 15 views
7

iOSシミュレータで購入することはよく知られている「いいえ、できません」です。 、この現象が発生するか、製品識別子、私が見つけた何よりError Domain=SSErrorDomain Code=0 "Cannot connect to iTunes Store" :しかし、私は次のエラーを取得していますSKProductsRequestDelegateではiOSの11SKProducts iOS 11シミュレータで動作しない要求

前に働いていたSKProductsRequestに製品識別子を提供することにより、SKProduct情報を取得しますApple Sandboxサーバーがダウンしています。製品はiOSの10の微細なロードされているので、しかし、これは、製品のフェッチの私の実装はかなりApple guides

と同じ..です

場合、誰がこれを経験したり解決策を見つけていますか?ではありませんか

アプリが物理デバイスで実行されているときに、製品が正常に読み込まれています。 私はXcode 9.0を使用しています。

答えて

4

ここに同じです。失敗したときにリクエストを繰り返す場合は、もう一度やり直してください。 umpteenthの繰り返しの後、それは最終的に製品を返すでしょう。 10回、50回、または100回以上の繰り返しが必要です。

だからこれは私のコードは、今どのように見えるかです:

- (void)inquireProducts { 
    _availableProducts = [NSMutableArray arrayWithCapacity:0]; 
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"productIds" withExtension:@"plist"]; 
    knownProductIdentifiers = [NSArray arrayWithContentsOfURL:url]; 
    if (knownProductIdentifiers && knownProductIdentifiers.count) { 
     // Keep a strong reference to the product request 
     productsRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithArray:knownProductIdentifiers]]; 
     productsRequest.delegate = self; 
     [productsRequest start]; 
    } 
} 

#pragma mark SKProductsRequestDelegate method 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
    for (SKProduct *product in response.products) { 
     [_availableProducts addObject:product]; 
    } 
    productsRequest = nil; 
    [[NSNotificationCenter defaultCenter] postNotificationName:IAPPurchaseNotification object:self]; 
} 

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error { 
    if (request == productsRequest) { 
     static int count = 0; 
     NSLog(@"Request %@ failed on %d. attempt with error: %@", request, ++count, error); 
     productsRequest = nil; 
     // try again until we succeed 
     [self inquireProducts]; 
    } 
} 
+2

おかげさまで、@vilmoskörte!実際に問題が発生した場合、私は無限に再試行すると考えていますが、それはその周りの方法かもしれません。しかし、デバッグのためには良いアイデアです。 私は昨日AppleにDTSを送ってきて、かなり速い応答を得て、それはバグのように見えます(iOS 11以来、彼らはシミュレータでプロダクトを取得していないと言いませんでした) だから私バグレポートを送ったすぐにこれを修正することを願っています。 :) –

+0

はい、それは無限に再試行されます。これを防ぐために、最後のメソッドに 'if(count == 200)return;'のようなものを挿入することによって、カウンタを使って制限を設定することももちろん可能です。 –

+1

同じ問題を抱えています。多数のリクエストに無関係に動作するようです。ちょうど一般的にはうまくいかないようです。これは、私のサブスクリプションのための私のユニットテストのすべてが失敗する原因です。楽しくない。誰でもこれがうまくいっているかどうかについてのフィードバックを得ることができますか? –

0

それはリンゴの問題です。私も同様の問題がありました。多くを試した後、私は10回の製品リクエスト方法を思い出し、2回目の試みで応答を得ました。 iOS 9および11でのみ動作します。 iOS 10ではなく、あなたがあなたの製品を手に入れたら、後で初めてそれを買収するでしょう。これは、デバイスとシミュレータの両方で動作します。私の実装は次のようになります:

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error 
{ 

int tried=(int)[[NSUserDefaults standardUserDefaults] integerForKey:@"try"]; 
[[NSUserDefaults standardUserDefaults] setInteger:tried+1 forKey:@"try"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

if([[GameState shared].availableInApps count]==0&&(int)[[NSUserDefaults standardUserDefaults] integerForKey:@"try"]>10) 
{ 
    [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(retry_product) userInfo:nil repeats:NO]; 
} 
関連する問題