这比Android应用内结算库与应用内结算API有更好的优势

gan*_*esh 11 android in-app-purchase


我遇到了应用内结算库(使用BillingClient)和应用内结算API(使用IInAppBillingService)都用来管理订阅,我的问题是必须在什么情况下使用.

我正在使用应用内结算API测试并检查应用的启动屏幕上的订阅状态.我的逻辑很简单,使用getPurchases()方法获取购买状态.如果getPurchases()返回空,我认为是"未购买状态"否则"购买国".如果符合以下标准,这将解决吗?

1.延期结算
2.购买到期

如果定期付款失败(例如,因为客户的信用卡已失效),则订阅不会续订.getPurchases()方法不会返回失败或过期的订阅.

这是什么意思

 Bundle ownedSubscripedItems = mService.getPurchases(3, getPackageName(), "subs", null);

 ArrayList<String> purchaseDataList =
                            ownedSubscripedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
Run Code Online (Sandbox Code Playgroud)

对于过期的订阅,purchaseDataList数组是否为空?

对递延账单的回应是什么?.如何检查该用户是否喜欢推迟计费.他们的回复是否与普通用户相同?

Llu*_*art 11

开发人员文档说

该库是Android界面定义语言(AIDL)文件的包装,它定义了应用内结算服务的界面 https://developer.android.com/google/play/billing/billing_library.html

然后两者基本相同.我个人直接使用AIDL

对于延期开票,如果延期期限到期而未付款,那么getPurchases将返回未购买,任何未续订的订阅都会发生同样的情况.

不要忘记验证getPurchases()!返回的任何购买的签名,并且更好地验证某些库与标准java.security不同,或者更好地使用外部签名验证服务器.

UPDATE

使用AIDL或库之间的主要区别在于库使用异步操作,并在完成时调用侦听器.

相反,一些AIDL方法可以同步工作,并会阻塞调用线程.这意味着如果你直接使用AIDL更好地在一个单独的线程中调用它,那就是我个人所做的.两种方式都是一样的,但方式不同.

优势?使用你喜欢的那个,如果你习惯使用单独的线程我推荐AIDL.

如果您怀疑是否getPurchases()将转换为归还项目所拥有的项目,当订阅到期或推荐时间到期而未付款时答案为是.