首页 > 解决方案 > 如何在 android 中验证 IAP?

问题描述

我发现很难在网上找到完整的文档。所以,atm 我有一个 Cloud Firestore 数据库。一种非消耗品,可解锁高级版本。我找到的简短指南建议:

要在受信任的服务器上验证购买详细信息,请完成以下步骤:

我使用什么服务器?cloud fire-store 是否足以完成此验证?

如何验证您的应用程序的密钥是否已签署您处理的 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?为什么这方面的文献记录很差。

甚至值得努力吗?我不希望这个应用程序被下载数百万次。我应该跳过它吗?

标签: javaandroidfirebasein-app-purchase

解决方案


您可以使用 Firebase Cloud Function 进行收据验证。您将设置一个HTTP 触发函数,通过该函数传递购买令牌并在令牌有效与否时让它返回。

您不需要数据库中存储任何内容(尽管您可能想要)。收据验证可以在一个函数中完成 - 网上有一些有据可查的开源示例

值得付出努力吗?这取决于您希望投入多少时间,以及您是否认为拥有“假”购买代币的用户的成本超过了这项投资。

另一种选择是为您的应用内购买服务器使用托管解决方案,例如RevenueCat(免责声明:我在那里工作)。


推荐阅读