Android:如何检查用户是否具有有效订阅

时间:2019-07-17 17:16:04

标签: android kotlin android-billing

我正在使用Google Billing,并尝试通过两种解决方法来了解订阅是否已过期:

  1. billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.SUBS) { billingResult, purchasesList -> }

  2. val purchasesList = billingClient.queryPurchases(BillingClient.SkuType.SUBS).purchasesList

他们返回类似的内容:

{
  "productId": "weekly_with_trial",
  "purchaseToken": "someToken",
  "purchaseTime": 1563305764597,
  "developerPayload": null
}
{
  "orderId": "GPA.3380-7704-5235-01361",
  "packageName": "com.myapp",
  "productId": "weekly_trial_trial",
  "purchaseTime": 1563305764597,
  "purchaseState": 0,
  "purchaseToken": "someToken",
  "autoRenewing": false,
  "acknowledged": false
}

他们两个都向我返回了购买清单,但没有有关其是否过期的任何信息。如何检查?

3 个答案:

答案 0 :(得分:1)

Google Play结算文档明确表明,有两个功能可以获取购买清单

val purchasesResult: PurchasesResult =
        billingClient.queryPurchases(SkuType.INAPP)

进行查询购买时,此列表中仅显示有效订阅。只要应用内商品在此列表中,用户就应该有权访问它。

这意味着如果购买已过期,则您不会在queryPurchase的响应中得到该购买项目。 但是,请记住,它会返回Google Play商店的本地缓存结果。

因此,为了从网络通话中获得购买请求,您需要使用一种异步方法,该方法是 queryPurchaseHistoryAsync()

billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, { billingResult, purchasesList ->
   if (billingResult.responseCode == BillingResponse.OK && purchasesList != null) {
       for (purchase in purchasesList) {
           // Process the result.
       }
   }
})

但是对象中有一个捕获项,其中包含有关用户针对每个产品ID进行的最新购买的信息,即使该购买已过期,取消或消费。

因此,您可以使用 queryPurchase()来获取所有有效购买。

答案 1 :(得分:0)

这是我用来检查活动订阅的代码:

private void isUserHasSubscription(Context context) {
        billingClient = BillingClient.newBuilder(context).enablePendingPurchases().setListener(this).build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                Purchase.PurchasesResult purchasesResult=billingClient.queryPurchases(BillingClient.SkuType.SUBS);

                billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.SUBS,(billingResult1, list) -> {
                    
                    Log.d("billingprocess","purchasesResult.getPurchasesList():"+purchasesResult.getPurchasesList());
                    
                    if (billingResult1.getResponseCode() == BillingClient.BillingResponseCode.OK &&
                            !Objects.requireNonNull(purchasesResult.getPurchasesList()).isEmpty()) {

                            //here you can pass the user to use the app because he has an active subscription  
                            Intent myIntent=new Intent(context,MainActivity.class);
                            startActivity(myIntent);
                    }
                });
            }
            @Override
            public void onBillingServiceDisconnected() {
                // Try to restart the connection on the next request to
                // Google Play by calling the startConnection() method.
                Log.d("billingprocess","onBillingServiceDisconnected");
            }
        });
    }

答案 2 :(得分:-2)

请按照以下步骤检查您的订阅自动续订是否被取消。

转到手机设置。

单击iTunes&App Store。

点击屏幕顶部的Apple ID。

点击查看Apple ID。

点击订阅。

点击所需的应用。

查看订阅状态。