Код: Выделить всё
in_app_purchase_android: 0.4.0+10- Google Play обрабатывает ее правильно (получено тестовое письмо с квитанцией, создан идентификатор заказа, в песочнице отображается «Тестовая карта, всегда одобряется»)
- Приложение на короткое время показывает «Покупка не завершена. Если вы отменили, просто попробуйте еще раз».
- уровень остается неизменным
- Наша серверная облачная функция () никогда не вызывается — подтверждается журналами GCP.
Код: Выделить всё
verifyIAP
Наш обработчик потока покупок:
Код: Выделить всё
void _onPurchaseUpdate(List
purchases) {
for (final purchase in purchases) {
if (purchase.productID != _pendingProductId) {
if (purchase.status != PurchaseStatus.pending) {
_iap.completePurchase(purchase);
}
continue;
}
switch (purchase.status) {
case PurchaseStatus.purchased:
case PurchaseStatus.restored:
_handlePurchased(purchase);
case PurchaseStatus.canceled:
_iap.completePurchase(purchase);
_resolvePending(IAPResult.cancelled);
case PurchaseStatus.error:
_iap.completePurchase(purchase);
_resolvePending(IAPResult.storeError);
case PurchaseStatus.pending:
break;
}
}
}
Вопрос: На Android может ли завершенная покупка в Google Play поступать в поток PurchaseStream как PurchaseStatus.error, а не PurchaseStatus.purchased? Если да, то при каких условиях? Или существует другой механизм, с помощью которого событие потока будет отброшено до достижения нашего обработчика?
Что мы уже исключили:
- Путь отмены DidChangeAppLifecycleState защищен возвратом if (Platform.isAndroid);
- 30-секундный тайм-аут не сработал (ошибка появилась быстро)
- возможно, но неясно, почему оно будет нулевым во время доставки потока.
Код: Выделить всё
_pendingProductIdНесоответствие - iOS корректно работает с тем же кодом.
Любая помощь будет оценена по достоинству! Спасибо