簡體   English   中英

Android:如何檢查用戶是否有活動訂閱

[英]Android: How to check if user have active subscription or not

我正在使用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
}

他們都給我發了一份購買清單,但沒有任何關於它是否過期的信息。 如何檢查?

由於 Google play billing 的文檔清楚地表明有兩個函數可以獲取購買列表

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()來獲取所有活躍的購買。

這是我用來檢查活動訂閱的代碼:

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");
            }
        });
    }

請按照以下步驟檢查您的訂閱自動續訂是否被取消。

轉到手機設置。

單擊iTunes&App Store。

單擊屏幕頂部的Apple ID。

單擊查看蘋果ID。

單擊訂閱。

點擊所需的應用。

查看訂閱狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM