这可能是一个相当模糊的问题。
我在应用购买包中使用 Flutter。
在大多数流程中不是问题,但有时某些用户会遇到此问题。
到目前为止已经显示的问题如下:
- 付款已成功。
- 该产品已转换为正常消费。
- 由于未调用 PurchaseUpdated 回调,因此无法留下任何日志或添加产品购买操作。
该功能的源代码核心如下:
@override
void initState() {
final purchaseUpdated = _inAppPurchase.purchaseStream;
_subscription = purchaseUpdated.listen((purchaseDetailsList) {
_listenToPurchaseUpdated(purchaseDetailsList);
}, onDone: () {
_subscription.cancel();
}, onError: (error) {
print(error.toString());
});
initStoreInfo();
super.initState();
}
void _listenToPurchaseUpdated(List<PurchaseDetails> purchaseDetailsList) {
purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
print('purchase status : ${purchaseDetails.status.toString()}');
setState(() {
_showProgress = true;
});
if (purchaseDetails.status == PurchaseStatus.pending) {
await api.inAppPayment(InAppPaymentRequest(purchaseDetails, 'Pending'));
} else {
if (purchaseDetails.status == PurchaseStatus.error) {
try {
await api.iapError(purchaseDetails.error);
} catch (e) {
print(e.toString());
}
setState(() {
_showProgress = false;
});
print('purchase error : ${purchaseDetails.error}');
DialogService.showSimpleDialog(context, content: Text('Purchase failed.'));
} else if (purchaseDetails.status == PurchaseStatus.purchased) {
var resultMessage = 'Purchase succeed.';
try {
await api.inAppPayment(InAppPaymentRequest(purchaseDetails, 'Purchased'));
} catch (e) {
resultMessage = 'Token validation failed.';
}
setState(() {
_showProgress = false;
});
widget.callback();
DialogService.showSimpleDialog(context, content: Text(resultMessage));
}
if (purchaseDetails.pendingCompletePurchase) {
await _inAppPurchase.completePurchase(purchaseDetails);
}
}
});
}
由于开发设备和环境无法重现该问题,我不知道如何调试和解决它。如果您发现代码中的任何漏洞或好主意,请告诉我。
谢谢你。