我在flutter中使用in_app_purchase,版本3.1.7。 而且订阅购买效果很好。但他们没有关于如何检查当前用户是否有有效订阅的文档。
我尝试编写这段代码,但我遗漏了一些东西:
Future<void> loadSubscriptions() async {
final Set<String> subscriptionIds = <String>{'premium'};
final ProductDetailsResponse response =
await _inAppPurchase.queryProductDetails(subscriptionIds);
final List<ProductDetails> subscriptions = response.productDetails;
print(subscriptions);
}
void _listenToPurchaseUpdateV1(
List<PurchaseDetails> purchaseDetailsList) async {
purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
if (purchaseDetails.status == PurchaseStatus.purchased) {
if (purchaseDetails.pendingCompletePurchase == true) {
_isSubscribed = true;
} else {
_isSubscribed = false;
}
} else if (purchaseDetails.status == PurchaseStatus.error) {
print("ERROR ERROR");
}
});
}
Future<void> checkSubscriptionStatus() async {
var app = _inAppPurchase.purchaseStream;
app.listen(_listenToPurchaseUpdateV1, onDone: () {
setState(() {
_isSubscribed;
});
});
}
我在另一个线程中寻找答案,但没有找到任何答案。正在检查这个: Flutter如何使用in_app_purchase插件实现订阅?
将您的购买管理逻辑转移到后端。原因如下:
in_app_purchase
插件的用途:in_app_purchase
插件主要促进与计费 API 的通信以及购买过程。然而,它本身并不处理用户购买数据的存储、管理或验证。
为了有效地检查用户的订阅状态,拥有服务器端组件至关重要。该服务器充当集中中心,安全地存储和管理用户购买数据。
当用户进行购买时,服务器应接收并存储相关数据,包括购买令牌和用户标识符,并验证购买。随后,应用程序可以与服务器通信以验证当前订阅状态。
使用服务器保证用户订阅数据的完整性和安全性。将此信息单独存储在客户端可能会使其面临潜在的漏洞和欺诈。
操作系统和平台可能对订阅验证有不同的要求和方法。服务器可以充当统一的解决方案,允许与各种平台无缝集成。
在涉及多个用户的场景中,服务器提供了可扩展性。此外,在服务器上集中维护和更新订阅相关逻辑比在应用程序内管理更有效。
拥有服务器端基础设施可以在未来增强和修改订阅验证过程,而无需更新客户端应用程序。
实施良好的服务器端解决方案可确保准确且最新的订阅信息,从而提供更流畅、更可靠的用户体验。
一种可能的解决方案是使用 Firebase 作为后端。 Google 还提供了一个codelab,演示了插件的集成。
总而言之,虽然
in_app_purchase
插件对于启动购买很有帮助,但强大的订阅验证系统需要合并服务器端组件以实现安全数据管理和验证。