检查 in-app 订阅在我的无服务器 android 应用程序中是否处于活动状态

Checking if in-app subscriptions is active in my serverless android app

我有无服务器 android 应用程序,功能简单:如果用户有一些 in-app 订阅(自动更新),那么他可以在应用程序中使用功能,否则没有。我知道如何通过获取订阅信息(价格、标题等)和调用付款来实现功能。但我无法检查当前用户是否有活动(未取消)订阅。我在很多网站和教程上阅读了很多信息,并且写到我必须在我的服务器中使用 google API。但是我没有自己的服务器。 我为 in-app 订阅使用了两个不同的库:

'com.anjlab.android.iab.v3:library:1.0.44'

'com.android.billingclient:billing:1.1'

但没有人帮我检查用户是否有有效订阅。那么,如何制作这个任务呢?请帮助我,也许我错过了一些信息...

你试过打电话给 bp.loadOwnedPurchasesFromGoogle(); 吗?

编辑

所以试试这个:

Purchase purchase = inventory.getPurchase(product);
Log.d(TAG, "Purchase state: " + purchase.getPurchaseState());
// 0 (purchased), 1 (canceled), or 2 (refunded).
if (purchase.getPurchaseState() == 0
     || purchase.getPurchaseState() == 2) {
   showPremiumVersion();
} else {
   showFreeVersion();
}

或者这个解决方案:

bp.isPurchased("yourSKU")

编辑: Anjlab 库已经很长时间没有更新了。请使用 Google 自己的计费库,这个循序渐进的过程应该可以帮助您轻松地将其集成到您的应用程序中 - Google In App Billing library

用的anjlab in-app-billing library 我也遇到过类似的情况。这就是我为解决这个问题所做的。

调用方法 billingProcessor.loadOwnedPurchasesFromGoogle(); 然后检查 transactionDetails 的值,如果 TransactionDetails 对象 return null 这意味着用户没有订阅或取消订阅,否则他们仍在订阅中。

void checkIfUserIsSusbcribed(){
  Boolean purchaseResult = billingProcessor.loadOwnedPurchasesFromGoogle();
  if(purchaseResult){
     TransactionDetails subscriptionTransactionDetails = billingProcessor.getSubscriptionTransactionDetails(YOUR_SUBSCRIPTION_ID);

     if(subscriptionTransactionDetails!=null)
        //User is still subscribed
     else  
        //Not subscribed
     }
}

此外,需要注意的是,TransactionDetails 对象只会在订阅期限到期后 return 为 null。

isPurchsed 方法无法捕获错误购买/取消购买/重新购买的历史记录。

使用这个并且不要忘记在清单中添加 INTERNET 权限。

TransactionDetails transactionDetails = billingProcessor.getPurchaseTransactionDetails("productId");
 if (transactionDetails != null) {
     //Already purchased
     //You may save this as boolean in the SharedPreferences.
 }