ios - in_app_purchase 如何从 serverVerificationData 获取 android 验证所需的数据

标签 ios flutter in-app-purchase android-billing

我正在尝试在我的 flutter 应用程序中实现 IAP 的服务器端验证。我正在使用该包

https://pub.dev/packages/in_app_purchase

版本:^0.3.4+8

我很困惑如何获取数据来验证我对 Android 和 IOS 的购买。在 documentation他们说

"or verify the data using your own server with serverVerificationData."

这个字符串似乎返回某种编码字符串。然后如何从该字符串中提取所需的数据?我尝试了base64Decode(),因为localVerificationData是base64Encoded,但这不起作用。

Android 需要包名称、购买 ID 和购买 token 。而ios需要一个对象receipt-data。我对如何从 serverVerificationData 字符串获取该数据感到困惑。

我目前正在首先实现 android。

localVerificationData 文档说

The data used for local verification.

If the source is IAPSource.AppStore, this data is a based64 encoded string. The structure of the payload is defined using ASN.1. If the source is IAPSource.GooglePlay, this data is a JSON String.

因此 serverVerificationData 必须与 localVerificationData 不同,因为它看起来根本不像 JSON。我也不确定在这里发布 serverVerificationData 是否安全,因为它可能包含敏感信息。

这是一个类似于我在 Android 上得到的字符串,只是我更改了所有字母、数字等。所以这只是格式的问题

zdfdzcdshxvbxmgbafdxvdzt.JK-GR58OHRPOGFEFHEGVEACBEIFDAPDH_EFHEWFEHFHPEGVERBWBASZWDAWODPAWD-HDSWCGOEWFP-EFPEQFHPEDHEWYIFEWFUWEFDASCNAQWFDefphFEQUIWEFpofgewpfFEWHFPWEF

在存储库中,他们显示他们调用 _verifyPurchase(purchase);示例中没有实现。

https://github.com/flutter/plugins/tree/master/packages/in_app_purchase#listening-to-purchase-updates

https://github.com/flutter/plugins/blob/5a183ac54a515be096d01f3a35546c5d89a30dca/packages/in_app_purchase/example/lib/main.dart#L350

他们说你应该始终验证

https://github.com/flutter/plugins/blob/5a183ac54a515be096d01f3a35546c5d89a30dca/packages/in_app_purchase/example/lib/main.dart#L328

这是我当前的代码

 Future<dynamic> verifyAndroid(PurchaseDetails details) async {
    DatabaseService databaseService = Get.find<DatabaseService>();
    String verificationData = details.verificationData.serverVerificationData;
    // zdfdzcdshxvbxmgbafdxvdzt.JK-GR58OHRPOGFEFHEGVEACBEIFDAPDH_EFHEWFEHFHPEGVERBWBASZWDAWODPAWD-HDSWCGOEWFP-EFPEQFHPEDHEWYIFEWFUWEFDASCNAQWFDefphFEQUIWEFpofgewpfFEWHFPWEF
    String packageName = ''; //get from verificationData 
    String productId = ''; //get from verificationData 
    String purchaseToken = ''; //get from verificationData 
    final response = await databaseService.verifyInAppPurchaseAndroid(packageName, productId, purchaseToken);
    return response;
  }

最佳答案

事实证明,数据位于detail.verificationData.localVerificationData中,而不是detail.verificationData.serverVerificationData中,并且detail.verificationData.serverVerificationData是Android上的购买 token 。

关于ios - in_app_purchase 如何从 serverVerificationData 获取 android 验证所需的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63954948/

相关文章:

ios - Phonegap iOS App源码可见

flutter - 如何将 http url 链接到 flutter-web

Flutter 图标未在 Iconbutton 中居中并且对齐没有任何作用

Android - 应用内购买 - 您需要将 BILLING 权限添加到您的 APK

ios - ALAssetLibrary 音频

iphone - 在 UITextField 中键入文本时如何删除默认声音?

youtube - 在容器或盒子内拍打YouTube视频

ios - 应用内购买数量限制问题

ios - paymentQueue - 交易失败

ios - 如何解决两个框架具有相同类错误的问题?