问题标签 [android-billing]

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.

0 投票
1 回答
1290 浏览

android - 具有自己的网络服务器的一致的安全 Google Play 应用内购买方案

我已多次阅读Android 开发人员指南中的所有文档, 并熟悉了很好的 Google 演示文稿Evading Pirates 和 Stopping Vampires

最后,我尝试按照上面的演示实现涉及我自己的 Web 服务器的应用内计费方案。以下是与我的服务器交互的要点:

  1. 在向 Google 发出 REQUEST_PURCHASE 请求之前,我向我的网络服务器发出请求以注册新的购买。如果请求成功,我会从服务器获得一个随机数。
  2. 交易完成后,我会收到一组通知 ID,以将它们传递给 GET_PURCHASE_INFORMATION 请求。此时我需要使用在步骤 1 中从我的服务器收到的随机数。<-我被困在这里了!
  3. 当 GET_PURCHASE_INFORMATION 成功时,我得到一个signedJson 和一个我传递给我的服务器的签名。它验证购买并在服务器上提交交易。

到目前为止我无法理解的是两件事:

  1. 在我的情况下,如何通过传入的 IN_APP_NOTIFY 意图识别先前生成的随机数?据我了解,它可以对应于当前购买完成或另一次购买退款。据我所知,我们只有与 REQUEST_PURCHASE 请求无关的通知 ID。
  2. 如何以我的服务器 100% 确认此事件的方式安全地处理退款?恕我直言,最自然的方式是定期从我的服务器请求 Google 服务器以检索订单的实际状态。不幸的是,在我的国家,开发人员无法使用 Google Checkout API。另一种方法是通过设备定期检查订单状态,使用 GET_PURCHASE_INFORMATION 请求传递已知的通知 ID 和新的随机数。如果在一段时间内检查失败,购买将自动过期,直到第一次成功的订单状态验证。这种情况可能吗?我可以在订单的 CONFIRM_NOTIFICATIONS 请求之后使用已知的通知 ID 发出 GET_PURCHASE_INFORMATION 请求吗?

编辑:关于退款(第 2 点)有一个相关主题Android In-App billing security issues?. Google Play 中没有内置的最终用户功能要求开发者退款应用内购买是否正确?如果是这样,那么我们可能会在我们的应用程序中实现一个按钮,将此类退款请求发送到我们的服务器,包括所有必要的信息,例如经过验证的用户凭据,然后在 Google 商家帐户和服务器的数据库中手动处理退款。

0 投票
2 回答
1042 浏览

android - Android 应用内计费获取对话框,如“未找到项目”

我正在处理应用内计费。我已经完成了所有步骤。当我运行我签名的 apk 并单击购买按钮后,我得到这个对话框“找不到项目”。同样在单击确定后,另一个对话框将打开,例如“您请求的项目不可购买”我的应用程序有什么问题?我也在使用另一个帐户进行测试。

0 投票
1 回答
397 浏览

android - 应用内计费实施:确认购买

这是实现应用内计费的代码的一部分。我有两个疑问。

我的问题:

  1. 在我说“此时我必须进行高级更改”时,我如何向您保证该应用程序已被购买?

  2. 据我了解,一旦购买,可能需要几个小时才能生效。如何确保我的应用程序将执行正确的代码:“此时我必须进行高级更改”?

0 投票
0 回答
35 浏览

android-billing - 如何在应用计费交易中找到相关的账户信息

Google 文档指定应用内结算交易与设备上设置为主的帐户相关联。如果用户在他的手机中注册了多个谷歌账户,我们如何才能找到交易是通过哪个账户进行的。我还研究了这个链接:How to get the Android device's primary e-mail address

0 投票
1 回答
1386 浏览

android - 将应用内购买添加到现有已发布的应用程序并在不发布的情况下对其进行测试

我正在尝试为以前没有计费权限的现有已发布应用添加应用内购买。我上传了一个更新后的 APK 并获得了计费权限,但由于我不想发布此草稿,因此没有激活它。但是,我无法添加应用内产品 - 它仍然显示“当前应用程序版本不使用 BILLING 权限”。有什么办法可以解决/解决这个问题?

0 投票
1 回答
108 浏览

android - Android - 测试应用内计费,不确定如何启用产品并使用测试帐户进行测试

我已经使用 adb 工具在我自己的设备上进行了测试,该程序似乎工作正常。

我创建了一个测试帐户,并将其添加到我的开发者控制台中。但是当我尝试使用我的测试帐户登录开发者控制台时,Google play 试图让我支付 25 美元以注册为开发者。所以我认为我做错了什么。如何使用我的测试帐户登录我的设备?

谢谢!

0 投票
4 回答
9041 浏览

android - Android 计费异常

我正在测试我的帐单,我得到了这个例外:

在我运行这段代码之后:

但在此之前,我以测试用户身份运行它,测试产品 id 是这样的:android.test.purchased 并且它有效。但是,当我将产品 ID 更改为我自己的产品 ID 之一时,它崩溃了,但出现了上述异常。

任何想法为什么会这样?谢谢!

0 投票
11 回答
24014 浏览

android - 从 Fragment 调用 startIntentSenderForResult (Android Billing v3)

startIntentSenderForResult()启动购买流程时使用新的 Android Billing v3 文档和帮助代码。我想从Fragment.

例如文档建议调用

帮助代码调用

调用startIntentSenderForResult().

问题是,调用startIntentSenderForResult()会导致onActivityResult()调用父级Activity而不是Fragment调用它的源(IabHelper驻留位置)。

我可以onActivityResult()在父级中接收Activity,然后在onActivityResult()上手动调用Fragment,但是有没有办法调用startIntentSenderForResult()from a ,Fragment将结果直接返回给 that FragmentonActivityResult()

0 投票
2 回答
3040 浏览

android - 查询已购商品时获取订单ID

我正在查看查询拥有的项目,它不包括获取用户实际购买时可用的结帐订单 ID。有没有办法查询已经购买的订单ID?

0 投票
3 回答
4080 浏览

android - 清除 Android 结算本地缓存?

我正在使用 Android Billing API V3 从 Play 商店查询购买信息。我想知道是否可以清除本地缓存。

V3 为计费 API 添加了本地缓存功能,以减少网络流量。我有一个每天运行的更新服务,它更新我的元数据,由于我在我的应用程序中显示成本,我希望刷新本地缓存并触发更新,以防我更新了价格以确保显示正确的价格。

文档说:

由于 Google Play 客户端现在在设备本地缓存应用内结算信息,因此您可以使用版本 3 API 更频繁地查询此信息,例如通过 getPurchases 调用。与以前版本的 API 不同,许多第 3 版 API 调用将通过缓存查找而不是通过与 Google Play 的网络连接来提供服务,这显着加快了 API 的响应时间。