2013-03-15 3 views
10

У нас есть приложение с покупками монет IAP. Недавно мы получили письма от нескольких наших пользователей, заявив, что они не могут купить какие-либо монеты. Я посмотрел их журналы сеансов и увидел Failed IAP events, каждый из которых не был зарегистрирован с ошибкой. Вот соответствующий код:SKPaymentTransactionStateFailed, но нет NSError

- (void)_purchaseRequestFailed:(SKPaymentTransaction *)transaction state:(StoreTransactionState)state error:(NSError *)error 
{ 
    IAPProduct *product = [self getProductWithId:transaction.payment.productIdentifier]; 
    if (error.code==SKErrorPaymentCancelled) { 
     [_metricsManager logFailIAP:product failReason:@"Payment canceled"]; 
    } else { 
     [_metricsManager logFailIAP:product failReason:error.localizedDescription]; 
    } 
    if ([_delegate respondsToSelector:@selector(didSucceedPurchasingProduct:)]) { 
     [_delegate didFailPurchasingProduct:product]; 
    } 
} 

внутри logFailIAP, я вхожу вещи, как время, UDID, имя события и error.localizedDescription.

if (failReason != nil && failReason.length > 0) { 
     [metricsDictionary setObject:failReason forKey:MetricsEventParameterFailReason]; 
} 

В журналах я получаю неудачные события IAP, но не имеет причин для сбоев. Есть ли случай, когда вы получаете «SKPaymentTransactionStateFailed», но имеете пустую ошибку.localizedDescription? Я могу подтвердить, что журналы работают, и видели ошибки, такие как «Отмена платежа» и «Не удается подключиться к iTunes», которые регистрируются на других устройствах. Эта проблема не относится к устройству или iOS.

+0

Как выглядит ваш метод paymentQueue: updatedTransactions: method. Особенно, как вы перемещаете массив транзакций. – neoneye

ответ

1

я столкнулся с нулевыми error по следующему сценарию:

  • обновления пользователя IOS на их устройства.

  • Сразу после обновления пользователь переходит в ваше приложение и пытается совершить покупку.

  • Вместо обычного диалогового окна покупки они получают «условия обслуживания iTunes». Вам необходимо принять новый T & C »(или что-то в этом роде), который перенаправляет их в приложение iTunes и показывает их новый T & C. Затем платеж отменяется, и вы получаете нуль error и, очевидно, ноль error.localizedDescription.

Для этого сценария ваше приложение должно быть первым пунктом взаимодействия пользователя с iTunes Store после обновления системы.

Смежные вопросы