[英]Restore purchase not working in Flutter/Google Play
我已按照in_app_purchase
包示例在应用程序购买 (IAP) 中实施
我可以从商店购买产品(我只有一个设置)。 但是在测试“用户有一部新手机”的场景时,恢复购买似乎不起作用。 也没有错误。
我已经在提供者模式中实现了这一点。 存储连接初始化如下:
_isStoreAvailable = await _inAppPurchase.isAvailable();
采购是这样实现的:
Future<void> initializePurchase() async {
ProductDetailsResponse response =
await _inAppPurchase.queryProductDetails(_productIds);
if (response.notFoundIDs.isNotEmpty) {
// Handle the error.
print("not found product in store!)");
} else {
PurchaseParam purchaseParam = PurchaseParam(
productDetails: response.productDetails.first,
);
_inAppPurchase.buyNonConsumable(purchaseParam: purchaseParam);
}
}
我使用以下代码监听更改:
final Stream<List<PurchaseDetails>> purchaseUpdated =
_inAppPurchase.purchaseStream;
_subscription =
purchaseUpdated.listen((List<PurchaseDetails> purchaseDetailsList) {
_listenToPurchaseUpdated(purchaseDetailsList);
}, onDone: () {
_subscription.cancel();
}, onError: (error) {
print("listen error: $error");
});
...和这个
Future<void> _listenToPurchaseUpdated(
List<PurchaseDetails> purchaseDetailsList) async {
for (final PurchaseDetails purchaseDetails in purchaseDetailsList) {
if (purchaseDetails.status != PurchaseStatus.pending) {
if (purchaseDetails.status == PurchaseStatus.error) {
//handle error
} else if (purchaseDetails.status == PurchaseStatus.purchased ||
purchaseDetails.status == PurchaseStatus.restored) {
setLicense(StoreLicenseStatus.paid);
notifyListeners();
if (purchaseDetails.pendingCompletePurchase) {
await _inAppPurchase.completePurchase(purchaseDetails);
}
}
}
}
}
用户可以使用以下代码请求恢复购买:
Future<void> restorePurchases() async {
await _inAppPurchase.restorePurchases();
}
除了恢复之外的一切都有效。 我可以购买产品,清除数据,当我再次启动应用程序时,如果我尝试购买,我会收到来自商店的消息“您已经拥有该商品”。 所以商店承认该产品已被购买,太棒了! 但是当我点击“恢复”时,什么也没有发生。
我在这里错过了什么吗?
这是在模拟器(Pixel 4 API 32)上,也在真实设备上。
对我来说完全一样的情况。 尽管我肯定有购买,但恢复购买不会恢复任何东西。
此外,我必须提到,当我在本地构建应用程序(调试和发布模式)时,它可以完美运行,但是当我使用 CICD 构建它并进行 Firebase App Distribution 或 Play Console 内部测试时,就会出现问题。
GitHub线程。
这是由in_app_purchase_android包中的错误引起的。
新的计费 API 在 queryPurchasesAsync 中使用异步侦听器。 有一个变化是在后台线程而不是主 UI 线程上调用侦听器,这导致查询购买永远不会完成。
同时将此添加到您的pubspec.yaml
作为解决方法:
dependency_overrides:
in_app_purchase_android: 0.2.2+8
有关更多详细信息,请参阅此GitHub 问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.