SKProductsRequest не работает в симуляторах iOS 11

Покупка в симуляторе iOS - это общеизвестное "нет, это невозможно". Тем не менее, получение SKProduct информация путем предоставления идентификаторов продукта SKProductsRequest раньше работал до iOS 11.

в SKProductsRequestDelegate Я получаю следующую ошибку: Error Domain=SSErrorDomain Code=0 "Cannot connect to iTunes Store"Из того, что я обнаружил, это может произойти, если идентификаторы продукта неверны или серверы Apple Sandbox не работают. Однако это не так, поскольку продукты нормально загружаются на iOS 10.

Моя реализация выборки продуктов почти такая же, как в руководствах Apple

Кто-нибудь еще испытывает это или нашел решение?

Продукты загружаются нормально, когда приложение работает на физическом устройстве. Я использую Xcode 9.0.

3 ответа

Тоже самое. Если вы повторяете запрос в случае сбоя, попробуйте еще раз. После сотого повторения он, наконец, вернет продукты. Это может занять 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];
    }
}

Это проблема с яблоком. У меня тоже была похожая проблема. После многих попыток я вспоминаю метод запроса продукта 10 раз и получаю ответ во второй попытке. Работает только на 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];
}

Мне помог аналогичный вопрос и этот ответ: /questions/51091847/zapros-pokupki-v-prilozhenii-v-ios-13-ne-vyipolnyaetsya/51091852#51091852

Кстати: тестирование на реальном устройстве полностью решило проблему

Другие вопросы по тегам