我正试图通过Android In-App Billing的第3版API工作,并遇到了以下问题:
如果我使用launchPurchaseFlow
开始购买,它会按预期显示购买对话框,让我完成购买。购买完成后,如果我再次请求SKU详细信息,则会将产品报告为拥有。因此,购买过程本身就可以正常运作。
什么不起作用的是购买本身的通知。我传递给OnIabPurchaseFinishedListener
的{{1}}永远不会被调用。如果我取消购买,也不完成,我也不会。
我打开了launchPurchaseFlow
类的日志记录,并在LogCat中获得以下输出:
IabHelper
那就结束了。
我的活动在显示购买对话框时收到onPause()
事件,当对话再次消失时收到onResume()
事件(如果购买被取消或完成,则两者都有)。除了IabHelper: Starting in-app billing setup.
IabHelper: Billing service connected.
IabHelper: Checking for in-app billing 3 support.
IabHelper: In-app billing version 3 supported for <my app>
IabHelper: Subscriptions AVAILABLE.
IabHelper: Starting async operation: refresh inventory
IabHelper: Querying owned items, item type: inapp
IabHelper: Package name: <my app>
IabHelper: Calling getPurchases with continuation token: null
IabHelper: Owned items response: 0
IabHelper: Continuation token: null
IabHelper: Querying SKU details.
IabHelper: Got sku details: <my test product>
IabHelper: Querying owned items, item type: subs
IabHelper: Package name: <my app>
IabHelper: Calling getPurchases with continuation token: null
IabHelper: Owned items response: 0
IabHelper: Continuation token: null
IabHelper: Querying SKU details.
IabHelper: Ending async operation: refresh inventory
IabHelper: Starting async operation: launchPurchaseFlow
IabHelper: Constructing buy intent for <my test product>, item type: inapp
IabHelper: Launching buy intent for <my test product>. Request code: 1
之外,这两个事件目前在我的应用中都不执行任何操作。
这是API中的错误吗?或者我需要先设置一些东西?任何帮助将不胜感激。
答案 0 :(得分:3)
挖掘IabHelper
的来源,我发现了问题:
购买意图的结果将发送到活动的onActivityResult(...)
方法。从那里,它需要手动转发到IabHelper's
handleActivityResult(...)
方法,如下所示:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (myIabHelper.handleActivityResult(requestCode, resultCode, data)) return;
super.onActivityResult(requestCode, resultCode, data);
}
这解决了成功和中止购买的问题。
&#34;耶&#34!;全面的文件......