Android应用内购买库和应用内购买API哪个更有优势?

14
我发现In-app Billing Library(使用BillingClient)和In-app Billing API(使用IInAppBillingService)都用于管理订阅。我的问题是在什么情况下应该使用哪一个。
我正在使用In-app Billing API进行测试,并在应用程序的启动画面上检查订阅状态。我的逻辑很简单,使用getPurchases()方法获取已购买状态。如果getPurchases()返回为空,则认为处于“未购买状态”,否则为“已购买状态”。这是否解决以下情况?
1. 延迟计费 2. 购买到期
如果一个循环付款失败(例如,因为客户的信用卡无效),则订阅不会续订。getPurchases()方法不会返回失败或过期的订阅。
这是否意味着:
 Bundle ownedSubscripedItems = mService.getPurchases(3, getPackageName(), "subs", null);

 ArrayList<String> purchaseDataList =
                            ownedSubscripedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");

在过期的订阅中,purchaseDataList数组会为空吗?

而对于延迟结算的用户,响应会是什么?如何检查这些用户是否享有延迟结算?他们的响应是否与普通用户相同?


3
AIDL文档现在说,“警告:AIDL现在已被废弃,将在未来的版本中被移除。要实现Google Play账单功能,请使用Google Play账单库。”对于新的实施者来说,这应该使选择变得非常清晰了。 - Columbo
1个回答

12

开发者文档指出

该库是Android Interface Definition Language (AIDL)文件的包装器,用于定义In-app Billing服务的接口 https://developer.android.com/google/play/billing/billing_library.html

然后两者基本上是一样的。我个人直接使用AIDL

对于延期计费,如果延期期限到期而未付款,则getPurchases将返回未购买,同样也会发生在任何未续订的订阅中。

不要忘记验证由getPurchases()返回的任何购买的签名!最好使用与标准java.security不同的某个库进行验证,甚至更好的是使用外部签名验证服务器进行验证。

更新

使用AIDL还是库的主要区别在于,库使用异步操作,并在完成时调用监听器。

相反,一些AIDL方法工作同步并会阻塞调用线程。这意味着如果您直接使用AIDL最好在分离的线程中调用它,这是我个人的做法。 两种方式都可以实现相同的功能,但是方式不同。

优点?使用您更喜欢的那个,如果您习惯于使用单独的线程,我建议使用AIDL。

如果您的疑问是getPurchases()是否会从拥有物品切换为未拥有的物品,当订阅到期或延迟时间到期但未付款时,答案是肯定的。


我个人使用这个库 :) 但是它非常准确。 - easycheese
感谢您的回复,我很乐意了解使用其中一个的优势,我已经编辑了我的问题以获得更详细的答案。 - ganesh
Tonteria,您的意思是说对于已过期的订阅者和延期的订阅者,数组列表也将为空。 - ganesh
数组中不会包含已过期订阅的项目。如果您正在测试Alpha或Beta版本,您可以测试购买产品,并且还可以调用consumePurchase()来删除它们。在第二种情况下,您可以看到它们不再出现在getPurchases()返回的数组中。 - from56
当通过测试卡为授权用户购买时,如何获取数据,如果购买是测试购买?这是为了分析目的。当我在onActivityResult中收到响应时,有没有一种方法可以获取这些数据?Inapp计费API据说可以使用ProductPurchase来实现。 - Swapnil
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接