[英]How to check if the user has an active subscription in Android, Google Play?
[英]Android: How to check if user have active subscription or not
我正在使用Google Billing
並嘗試通過兩種解決方案了解訂閱是否已過期:
billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.SUBS) { billingResult, purchasesList -> }
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.