Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查我的无服务器android应用中的应用内订阅是否处于活动状态_Android_In App Billing_In App Subscription_Play Billing Library - Fatal编程技术网

检查我的无服务器android应用中的应用内订阅是否处于活动状态

检查我的无服务器android应用中的应用内订阅是否处于活动状态,android,in-app-billing,in-app-subscription,play-billing-library,Android,In App Billing,In App Subscription,Play Billing Library,我有一个简单功能的无服务器android应用程序:如果用户有一些应用内订阅自动续费,那么他可以使用应用内功能,否则没有。我知道,如何通过获取订阅信息、价格、标题等和呼叫付款来实现功能。但我无法检查当前用户是否有活动的未取消订阅。我在很多网站和教程上读了很多信息,有人说我必须在我的服务器上使用GoogleAPI。但我没有自己的服务器。 我使用了两个不同的库进行应用内订阅: 'com.anjlab.android.iab.v3:library:1.0.44' 及 但并没有人帮我检查用户是否有活动订

我有一个简单功能的无服务器android应用程序:如果用户有一些应用内订阅自动续费,那么他可以使用应用内功能,否则没有。我知道,如何通过获取订阅信息、价格、标题等和呼叫付款来实现功能。但我无法检查当前用户是否有活动的未取消订阅。我在很多网站和教程上读了很多信息,有人说我必须在我的服务器上使用GoogleAPI。但我没有自己的服务器。 我使用了两个不同的库进行应用内订阅:

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

但并没有人帮我检查用户是否有活动订阅。那么,如何完成这项任务呢?请帮帮我,也许我错过了一些信息…

你有没有试着从谷歌打电话给bp.loadownedPurchases

编辑

所以试试这个:

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")
您是否尝试过从谷歌呼叫bp.loadownedPurchases

编辑

所以试试这个:

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")
我也面临着类似的问题。这就是我为了绕开它所做的

从Google调用billingProcessor.LoadownedPurchases方法;然后检查transactionDetails的值,如果transactionDetails对象返回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对象仅在订阅期限到期后返回null。

使用I时也面临类似的问题。这就是我为了绕开它所做的

从Google调用billingProcessor.LoadownedPurchases方法;然后检查transactionDetails的值,如果transactionDetails对象返回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对象仅在订阅期限到期后返回null。

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

使用此选项,不要忘记在清单中添加INTERNET权限

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

ISPourched方法无法捕获错误的购买/取消的购买/检索的购买的历史记录

使用此选项,不要忘记在清单中添加INTERNET权限

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

对于内存来说,这是一个异步任务,所以在检查新值之前需要等待。嗯,我找不到inventory.getPurchase方法。是在图书馆还是在com.android.billingclient:billing?@AlexD。这是anjlab,但我在旧版本中使用了它,请尝试bp.ispurchasedYoursku方法isPurchasedid始终返回false,因为我只处理订阅。方法isSubscribed在我订阅后返回true,但是当我取消订阅并且它的过期时间结束时,方法isSubscribed也总是返回true,这是错误的。所以我不知道如何解决这个问题:你试着等48小时吗?它可能很长。我几乎可以肯定bp.loadOwnedPurchasesFromGoogle;正在工作,请尝试等待48小时。内存不足,这是一个异步任务,因此您需要等待,然后再检查新值。嗯,我找不到inventory.getPurchase方法。是在图书馆还是在com.android.billingclient:billing?@AlexD。这是anjlab,但我在旧版本中使用了它,请尝试bp.ispurchasedYoursku方法isPurchasedid始终返回false,因为我只处理订阅。方法isSubscribed在我订阅后返回true,但是当我取消订阅并且它的过期时间结束时,方法isSubscribed也总是返回true,这是错误的。所以我不知道如何解决这个问题:你试着等48小时吗?它可能很长。我几乎可以肯定bp.loadOwnedPurchasesFromGoogle;正在工作,请尝试等待48小时。对于已取消的事务或保留的事务,此方法是否返回false?如何获取过期日期?对于已取消的事务或保留的事务,此方法是否返回false?如何获取过期日期?