我发现很难在线找到完整的文档。因此,atm我有一个Cloud Firestore数据库。一种非消耗品,可以解锁高级版本。我发现的short guide建议:
要在受信任的服务器上验证购买详细信息,请完成以下步骤:
确保设备服务器握手是安全的。
检查返回的数据签名和orderId,并确认orderId是您之前未处理过的唯一值。
我使用什么服务器?云防火商店是否足以完成此验证?
我如何验证您的应用程序的密钥已对您处理的INAPP_PURCHASE_DATA进行签名
每次用户购买商品时,我都需要阅读每个订单ID吗?这难道不会很快导致数据库上的数千次读取吗?
这里是onPurchasesUpdated
代码块,我将在其中执行验证:
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingResponseCode.OK
&& purchases != null) {
int index = 0;
for (Purchase purchase : purchases) {
if(purchase.getSignature().equals( /*Somehow check igned the INAPP_PURCHASE_DATA HERE?*/) || purchase.getOrderId().equals(purchases.get(index).getOrderId())) {
//Invalid
getMessage("Invalid. Order cancelled");
return;
} else {
handlePurchase(purchase);
}
}
} else if (billingResult.getResponseCode() == BillingResponseCode.USER_CANCELED) {
getMessage("Payment Cancelled");
} else {
getMessage("Error. Try Again");
}
}
我应该采取什么步骤?您如何验证IAP? 为什么加倍对此很可怜。
值得付出努力吗?我不希望这个应用程序被下载数百万次。我应该跳过吗?
答案 0 :(得分:0)
您可以使用Firebase Cloud Function进行收据验证。您将设置一个HTTP triggered函数,该函数传递购买令牌,并在令牌有效与否时将其返回。
您不需要将任何内容存储在数据库中(尽管您可能想要)。收据验证可以在一个函数中完成-在线有open-source examples的详细记录。
值得付出努力吗?这取决于您希望投资多少时间,以及您是否认为使用“假”购买代币的用户成本超过了这项投资。
另一种选择是为您的应用内购买服务器使用托管解决方案,例如RevenueCat(免责声明:我在那儿工作)。