SKPaymentQueue addPayment не всегда вызывает диалоговое окно подтверждения

Хорошо, я внедряю IAP в приложение iOs, и только некоторые продукты в магазине фактически запускают собственные диалоговые окна обработки покупок.

Фон:

Приложение использует cocos2dx с привязками javascript для кросс-платформенности. Мы погружаемся в собственные сектора iOs для реализации обработки хранилища.

Все эти звонки работают правильно:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[SKPaymentQueue canMakePayments];
[[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];

Записка о последнем. Все идентификаторы продуктов проверяются и возвращаются как действительные в productsRequest:request didReceiveResponse:response обратный вызов, но только если я не включаю идентификатор пакета в идентификаторы, которые отправляются. В большинстве примеров, которые я видел, говорилось, что это необходимо, но если они включены, все они возвращаются как invalidProductIdentifiers, Может ли это быть признаком проблемы?

Так что в настоящее время немного продукты выводят диалоговое окно подтверждения покупки после того, как их (ранее проверенные) идентификаторы переданы [[SKPaymentQueue defaultQueue] addPayment:payment], Большинство из них просто ничего не делают потом. Нет обратного вызова на paymentQueue:queue updatedTransactions:transactions, без кода ошибки, без сбоев.

Я не могу понять, почему некоторые работают, а большинство нет. По крайней мере, один расходный материал, не расходный материал и работа по подписке, так что я не думаю, что это так. Я обнаружил, что если я сломаюсь и перейду через код, который останавливается [[SKPaymentQueue defaultQueue] addPayment:payment]Существует небольшая вероятность того, что несколько продуктов работают чаще, хотя это не соответствует. Это привело меня к мысли, что это может быть проблема с многопоточностью, но вы можете увидеть, что я попробовал ниже, и это не помогло.

Вещи, которые я пробовал:

Чтение вокруг ТАК и в других местах люди предложили изменение тестовых пользователей, очистка очереди с [[SKPaymentQueue defaultQueue] finishTransaction:transaction]и что сервер Apple Sandbox иногда «имеет проблемы». Но ничего из этого не устранило, и мне кажется странным, что я не получаю сбоев или ошибок, он просто не реагирует на определенные идентификаторы продуктов.

Вот фактический звонок с некоторыми вещами, которые я пробовал:

- (void)purchaseProductWithId:(const char*)item_code
{
/** OCCASIONALLY MAY NEED TO CLEAR THE QUEUE **
NSArray *transactions = [[SKPaymentQueue defaultQueue] transactions];
for(id transaction in transactions){
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}// */

// dispatch_async(dispatch_get_main_queue(),^ {
SKPayment *payment = [SKPayment paymentWithProductIdentifier:[NSString stringWithUTF8String:item_code]];
//    [[SKPaymentQueue defaultQueue] performSelectorOnMainThread:@selector(addPayment:) withObject:payment waitUntilDone:NO];
[[SKPaymentQueue defaultQueue] addPayment:payment];
// } );
}

Если есть какой-то другой код, который может быть полезен, дайте мне знать.

Спасибо за вашу помощь.

Редактировать:
Я добавил hasAddObserver чек от этот вопрос, и это тоже не проблема.

4

Решение

Оказывается, это была временная вещь. Я не хотел бы обвинять серверы песочницы Apple в том, что они ненадежны, но ничего не изменилось, и через несколько дней это неожиданно сработало.

Так что, если у вас есть аналогичная проблема, может быть, сделать перерыв и вернуться к нему позже?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]