问题标签 [play-billing-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - android ANR BillingClient.queryPurchases
我正在使用 Google 计费服务,版本 2.0.3。BillingClient.queryPurchases
在Activity的onstart方法中运行UI线程中的方法,用户有时会遇到如下Application Not Responding错误:
解决此类 ANR 的最佳方法是什么?
google-play - 退款的非消耗性购买仍在列表中 Google Play 结算库 2.1.0
我用queryPurchases()
android dev 中所说的查询。
过程:
成功购买
向用户授予权利
承认它
使用谷歌开发控制台退款
我仍然可以查询购买,用户可以使用他们已退款的东西
https://developer.android.com/google/play/billing/billing_library_overview
谢谢。
android - 消费购买导致空对象引用
计费流程成功启动,我收到了购买收据电子邮件。
但是,在client.consumeAsync(consumeParams,consumeResponseListener);
调用时会发生致命错误。
这是有问题的,因为这意味着该购买尚未被消费且无法再次购买。
按钮点击:
setupBillingClient() 从 onCreate() 启动并导致连接成功:
任何建议,将不胜感激。
android - Play Billing - 实施应用内购买以解锁内容并移除广告
我有一个游戏,你和回答问题的朋友玩 1v1。目前有 5 组问题由 admob 货币化。我计划再增加 10 套和没收选项,这些都将通过应用内购买解锁(也删除广告)。
我有实现工作,但觉得这不是最好的方法,可以通过编辑来利用SharedPreferences
。
当用户通过应用内购买购买“高级版”时,我"has_premium"
在SharedPreferences
. 在我的片段中,OnCreateView()
我调用querySkuDetailsAsync()
并相应地更新此偏好,以确保所有购买都得到确认和最新。
无论我在哪里放置广告,我都会检查此SharePreference
值,然后显示/隐藏广告。同样,当显示RecyclerView
可用的问题集和没收时,我再次检查这个SharePreference
值。如果用户是高级用户,我会启用RecyclerView
. 如果用户不是高级用户,那么我会禁用一些项目,而是BillingFlow
在单击时启动。
有没有比存储价值更好的方法来检查用户是否购买了“高级”状态SharedPreferences
?
android - 如何在使用调试应用程序/包名称的同时使用 google play 测试应用程序购买
对于我的应用程序的调试版本,我附加.debug
到包名称,以便我可以测试两个差异应用程序等。
但是,当我尝试在应用程序中测试购买时,使用BillingClient
,它不起作用,因为它正在使用调试包名称查找应用程序购买 id 中的那些。
有什么方法可以在我的发布版本中测试所有内容吗?来回交换并使用具有 proguard 并且需要很长时间才能编译的构建进行测试是非常耗时的。
有没有办法改变使用的包名?(据我所见,它只需要一个Context
)。或者有没有办法在 Play 商店中创建一个假帐户来创建这些应用程序 ID?
android - 使用 Google Play 计费库 2 的延迟订阅续订实时开发者通知
在客户端中使用Google Play 计费库( GPBL ) 2时,第一个续订 实时开发者通知( RTDN )在订阅到期22 小时后到达。
这种差距可能会导致拒绝我们为用户提供服务。
使用客户端中的GPBL 1.2.2,续订RTDN在订阅到期前 2 小时到达。
重现步骤:
在 android 客户端应用程序中使用任何GPBL版本 2+。(使用GPBL 2.0.3、2.1.0、2.2.0测试)
1) 在 Google Play 上购买订阅(在客户端)
经测试:
7 天试用付费订阅。
5 分钟、15 分钟、30 分钟测试订阅(对于测试订阅,使用GPBL 2 时, RTDN 会在到期后 10 秒到达,而使用GPBL 1时会在到期前 2 分钟到达。)
以下示例中使用的5 分钟测试订阅:
2)验证购买(后端)
- 回复:
3)确认购买(后端)
- 响应 200(空体)
4)等待续订通知(后端)
- 收于 1584703361173 纪元毫秒
// "2020-03-20T11:22:41.173Z"
通知比原来的过期时间晚了 10 秒!
我知道的唯一区别是 Android 客户端中的不同GPBL版本和GPBL 2所需的购买确认调用。
只有第一个续订通知会延迟。随后的续订通知是准时的,每次到期前 2 分钟。
问题:
有什么办法可以在到期前获得第一次续订通知吗?
感谢您的任何提示或建议!
android - 使用协程在 Android BillingClient 中崩溃
我收到通知,我的计费解决方案以一种奇怪的方式崩溃。我无法重现它或找到修复/绕过问题。也许你能帮上忙。
Fatal Exception: java.lang.IllegalStateException: Already resumed
at kotlin.coroutines.SafeContinuation.resumeWith + 45(SafeContinuation.java:45)
at com.android.billingclient.api.BillingClientKotlinKt$querySkuDetails$2$1.onSkuDetailsResponse + 2(BillingClientKotlinKt.java:2)
at com.android.billingclient.api.zzj.run + 8(zzj.java:8)
at android.os.Handler.handleCallback + 907(Handler.java:907)
at android.os.Handler.dispatchMessage + 105(Handler.java:105)
at android.os.Looper.loop + 216(Looper.java:216)
at android.app.ActivityThread.main + 7625(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 524(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main + 987(ZygoteInit.java:987)
android - BillingClient.BillingClientStateListener.onBillingSetupFinished 被多次调用
我尝试使用 Kotlin Coroutines 为 BillingClient v.2.2.0 编写一个包装器:
如您所见,当我尝试查询购买或购买时,我确保客户已准备好。但是在生产中有很多错误:
我试图了解问题的原因并得到如果BillingClientStateListener.onBillingSetupFinished
将被多次调用可能会出现异常IllegalStateException: Already resumed
。我想知道这怎么可能,因为我每次startConnection
通话都在创建新的侦听器?我无法在模拟器或我的测试设备上重现此问题。谁能解释一下这里发生了什么以及如何解决它?
android - Android 计费库的 BillingResponse.OK 在哪里
在为 Android 设置新的应用内购买流程时,Google Developer 网站上的示例代码要求使用以下代码段。
https://developer.android.com/google/play/billing/billing_library_overview
然而,BillingResponse.OK
并不存在。我怎样才能使这项工作?
android - Play Billing Library 中的 queryPurchases() 是否保证检索到有效购买?
我正在使用 Google Play 计费库,并且阅读了有关在服务器上验证购买以及如何查询购买的文档和所有问题。
但是,有些点仍然不清楚,我在这里找不到答案。
要在用户下次启动应用程序时检索购买,文档说我们应该使用BillingClient.queryPurchases()
它,它说明了从此方法获得的列表:
只要应用内产品在此列表中,用户就应该有权访问它。
我从中了解到的是,仅 queryPurchases() 就可以保证用户确实购买了该商品,并且他必须能够访问它。
这是真的?
- 如果是,那么为什么我们不只是在用户购买后立即使用此方法作为验证,而不是在服务器上验证呢?
- 如果否,如果我不想在他每次启动应用程序时在我的服务器上验证他的购买,我如何为用户提供访问权限?
- 如果我在第一次验证后将购买保存在本地数据库中,并在应用程序启动时询问它以授予用户访问他的项目的权限,这是一种安全的方法,还是可以从恶意用户操纵这个数据库来授予自己访问溢价的权限内容?