![](/img/trans.png)
[英]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.