In-App-Purchase занимает слишком много времени, чтобы отобразить подтверждение предупреждения

Я столкнулся со следующей проблемой: когда мое приложение запускается на устройстве, и я нажимаю кнопку "ПОКУПАТЬ", которая запускает механизм In-App-Purchase, для отображения стандартного подтверждения UIAlertView требуется до десяти секунд, которое говорит: "Вы хотите покупать...". Я никогда не видел такого поведения раньше. Обычно это происходит немедленно. Поэтому сначала я подумал, что это может быть из-за плохого подключения к интернету или что-то в этом роде, но симулятор использует одну и ту же сеть Wi-Fi, и она отлично работает, представление предупреждения представляется мгновенно, как и должно быть. Поэтому проблема, вероятно, лежит где-то в другом месте. Кто-нибудь разрешил эту проблему?

Это кнопка:

- (void)buyItemTapped:(id)sender
{
[[InAppPurchaseManager sharedInstance] buy:[NSString stringWithFormat:@"com.mycompany.myapp.unit%d", [sender tag] + 1]];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(transactionFailed)
                                             name:TRANSACTION_FAILED_NOTIFICATION
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(productPurchased:)
                                             name:PRODUCT_PURCHASED_NOTIFICATION
                                           object:nil];

}

покупка метод:

- (void)buy:(NSString *)identifier
{
SKProduct *product = [self.products objectForKey:identifier];

if (product)
   [self purchaseProduct:product];
else
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                     message:@"Invalid Product Identifier"
                                                    delegate:nil
                                           cancelButtonTitle:@"OK"
                                           otherButtonTitles:nil];

    [alert show];

}
}

покупкаПродукт метод:

- (void)purchaseProduct:(SKProduct *)product
{
    if ([SKPaymentQueue canMakePayments])
{
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
 }
  else
      NSLog(@"Cannot make purchase");
}

Ответ 1

Это не должно иметь ничего общего с тем, когда фактический пользователь пытается совершить покупку, это связано с тем, что вы запускаете приложение в среде песочницы, также, если вы используете симулятор, это сделает его еще медленнее. Кроме того, даже когда фактический пользователь совершает покупку, телефон должен подключиться к серверам Apple, найти IAP из миллионов других по его идентификатору, убедиться, что информация соответствует, отправить эту информацию обратно на телефон с помощью шифрования, затем телефон должен проверить, соответствует ли шифрование успешному сообщению, а затем отправить успех пользователю. Как вы можете видеть, это нормально, что есть немного времени, прежде чем сообщение подтверждения будет отправлено обратно.

Я рекомендую добавить экран загрузки в методе SKPaymentTransactionStatePurchasing, сообщая пользователю, что вы действительно извлекаете информацию. Опять же, это на 100% нормально, что вы видите, Apple должна делать много проверок и проверять многое, прежде чем отправить ответное сообщение. Надеюсь это поможет!

Ответ 2

Вы в среде песочницы? Если это так, это нормальная ситуация. Я в Китае, мне нужно больше 10 секунд, когда я тестирую IAP на устройстве. Я думаю, что это не ваша техническая проблема. Верьте себе. :)

Ответ 3

Причина может заключаться в том, что вы находитесь в среде песочницы, которая имеет случайные икоты. Или ваше приложение может делать тяжелую работу при совершении покупки, что замедляет работу устройства (но быстро работает на более мощном симуляторе).