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