我有无服务器的Android应用程序具有简单的功能:如果用户有一些应用程序内订阅(自动更新),那么他可以在应用程序中使用功能,否则没有。我知道,如何通过获取订阅信息(价格,标题等)和致电付款来实现功能。但我无法检查当前用户是否有活动(未取消)订阅。我在许多网站和教程上阅读了很多信息,并且写了我必须在我的服务器中使用谷歌API。但我没有自己的服务器。 我在应用内订阅中使用了两个不同的库:
'com.anjlab.android.iab.v3:library:1.0.44'
和
'com.android.billingclient:billing:1.1'
但没有人帮我检查用户是否有有效订阅。那么,如何完成这项任务呢?请帮帮我,也许我错过了一些信息...
答案 0 :(得分:1)
您是否尝试拨打bp.loadOwnedPurchasesFromGoogle();
?
修改强>
所以试试这个:
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")
答案 1 :(得分:1)
使用anjlab in-app-billing library时,我也面临类似的问题。这就是我要解决的问题。
调用方法billingProcessor.loadOwnedPurchasesFromGoogle();
,然后检查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。
答案 2 :(得分:0)
isPurchsed方法无法捕获错误购买/取消购买/检索到购买的历史记录。
使用它,别忘了在清单中添加INTERNET权限。
TransactionDetails transactionDetails = billingProcessor.getPurchaseTransactionDetails("productId");
if (transactionDetails != null) {
//Already purchased
//You may save this as boolean in the SharedPreferences.
}