bar*_*ady 5 flutter flutter-in-app-purchase
我正在为我的 Flutter 应用程序使用应用程序内购买包。我的应用程序中有一项非消耗性应用程序内购买。每个用户创建一个用户帐户(使用 Firebase 身份验证)。一个用户可以与其他几个用户组成一个组,这些用户需要知道其他用户是否已付款。
我的想法如下:成功购买后,我想将purchaseDetails.purchaseID存储在数据库中(使用Firestore)。例如,如果用户随后在另一部手机上登录其用户帐户,则他们无需恢复购买。那么我就已经知道用户付款了。
此外,我仍然会实施恢复购买按钮。
我的问题是这样的:当我恢复购买时,我得到的PurchaseId 与以前不同。即使我尝试再次购买(App Store 告诉我我已经购买了该商品),之后我也会得到不同的 PurchasingID。
因此,用户可以创建一个帐户并购买该应用程序。然后在我的应用程序中创建一个新帐户,然后单击“恢复购买”。然后,我有两个帐户在我的数据库中列为已付费帐户,尽管只有一个帐户已付费。您可以根据需要多次重复此操作,例如将新帐户赠送给家人和朋友。
我是否有可能每次都获得相同的 ID?它不一定是PurchaseID。也许我可以保存其他东西(应用程序商店用户ID?)或者有一种完全不同的方法来解决我的问题?
当我过去处理订阅时,我使用了 RevenueCat。在那里,可以始终从同一个 App Store 或 Play Store 用户获取相同的 ID,以避免出现此问题。我现在也许也能做到。但如果可能的话,我实际上宁愿不使用 RevenueCat。
如果添加以下导入:
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart';
Run Code Online (Sandbox Code Playgroud)
可以检查purchaseDetails是否是AppStorePurchaseDetails对象。然后您就可以通过原始交易获取原始的购买ID。
var purchaseID = purchaseDetails.purchaseID;
if (purchaseDetails is AppStorePurchaseDetails) {
final originalTransaction = purchaseDetails.skPaymentTransaction.originalTransaction;
if (originalTransaction != null) {
purchaseID = originalTransaction.transactionIdentifier;
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何,使用 Google,您总是会获得相同的购买 ID。因此,没有必要在此采取任何进一步的步骤。根据文档,您还可以使用令牌 (purchaseDetails.verificationData) 而不是 PurchaseID 作为 ID 或主键。
buyToken 是全局唯一的,因此您可以安全地使用该值作为数据库中的主键
您还可以通过添加以下导入从 Android 获取其他信息:
import 'package:in_app_purchase_android/in_app_purchase_android.dart';
Run Code Online (Sandbox Code Playgroud)
例如,您可以检查订阅是否自动续订。
if (purchaseDetails is GooglePlayPurchaseDetails) {
if (kDebugMode) print('isAutoRenewing: ${purchaseDetails.billingClientPurchase.isAutoRenewing}');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |