我根据Google的教程使用Play Billing Library 1.0实现了应用程序内购买.我只有1件商品可以购买,当它解锁时,我会显示一个Toast.LENGTH_SHORT长度的Toast消息.然而,Toast在那里呆了10秒钟,所以我认为它被多次调用.当我通过queryPurchases(如果有人先前购买并在此期间重新安装应用程序)解锁时,它不会发生.
任何人都知道为什么Toast会停留这么久/为什么它被多次调用?
在我的BillingManager类中:
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
if (responseCode == BillingClient.BillingResponse.OK) {
for (Purchase purchase : purchases) {
handlePurchases(purchase);
}
mBillingUpdatesListener.onPurchasesUpdated(mPurchases);
} else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
} else {
}
}
public void handlePurchases(Purchase purchase) {
//here could be validation on own server
mPurchases.add(purchase);
}
Run Code Online (Sandbox Code Playgroud)
主Activity实现BillingUpdatesListener:
@Override
public void onPurchasesUpdated(List<Purchase> purchases) {
for (Purchase purchase : purchases) {
switch (purchase.getSku()) {
case "premium":
unlockPremium();
break;
}
}
}
public void …Run Code Online (Sandbox Code Playgroud) 我正在使用 Google 的计费库在我的应用程序内进行订阅。
~~ 3天后,google play已经退还了我用户的所有订阅,为什么呢?
一些带有活动的代码,用于进行订阅:
private var billingClient: BillingClient? = null
private val purchasesUpdateListener = PurchasesUpdatedListener { billingResult, purchases ->
val isSuccessResult = billingResult.responseCode == BillingClient.BillingResponseCode.OK
val hasPurchases = !purchases.isNullOrEmpty()
if (isSuccessResult && hasPurchases) {
purchases?.forEach(::confirmPurchase)
viewModel.hasSubscription.value = true
}
}
private fun confirmPurchase(purchase: Purchase) {
val consumeParams = ConsumeParams.newBuilder()
.setPurchaseToken(purchase.purchaseToken)
.build()
billingClient?.consumeAsync(consumeParams) { billingResult, _ ->
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
//all done
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
billingClient = BillingClient.newBuilder(this)
.setListener(purchasesUpdateListener)
.enablePendingPurchases() …Run Code Online (Sandbox Code Playgroud) android google-play in-app-subscription play-billing-library
我正在设置一个与 Google Play 结算库配合使用的界面。我使用querySkuDetailsAsync查询订阅产品,然后循环浏览返回的产品,以便启用购买按钮。
这是我正在使用的脚本
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List<SkuDetails> list) {
if (!list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getSku().equals("core_monthly")) {
monthlyDetails = list.get(i);
} else if (list.get(i).getSku().equals("core_annual")) {
annualDetails = list.get(i);
}
}
monthlySubscribe.setEnabled(true);
annualSubscribe.setEnabled(true);
monthlySubscribe.setText("Monthly Subscription");
annualSubscribe.setText("Annual Subscription");
} else {
Toast.makeText(getActivity(), "There was a problem getting available plans", Toast.LENGTH_SHORT);
}
}
});
Run Code Online (Sandbox Code Playgroud)
问题是 setText() 按钮文本永远不会更新。收到产品后如何更新按钮名称并启用它们?