使用 API v3 未收到 Android 应用内购买的结果
Not receiving result of Android In-App Purchase using API v3
我正在努力完成 Android 应用内结算的第 3 版 API,但遇到了以下问题:
如果我使用 launchPurchaseFlow
开始购买,它会按预期显示购买对话框,让我完成购买。购买完成后,如果我再次请求 SKU 详细信息,则该产品将被报告为已拥有。所以购买过程本身按预期进行。
没有用的是购买通知本身。我传递给 launchPurchaseFlow
的 OnIabPurchaseFinishedListener
永远不会被调用。无论是取消购买还是完成购买。
我打开 IabHelper
class 的日志记录并在 LogCat 中得到以下输出:
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
到此结束。
我的 activity 在对话框再次消失时收到一个 onPause()
event when the purchase dialog is shown and an onResume()
事件(如果购买被取消或完成)。这两个事件目前在我的应用程序中除了 System.out.println(...)
.
什么都不做
这是 API 中的错误吗?或者我需要先设置什么吗?任何帮助将不胜感激。
挖掘 IabHelper
的源代码,我发现了问题:
购买意向的结果将发送到 Activity 的 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);
}
这解决了购买成功和失败的问题。
"Yay!" 综合文档...
我正在努力完成 Android 应用内结算的第 3 版 API,但遇到了以下问题:
如果我使用 launchPurchaseFlow
开始购买,它会按预期显示购买对话框,让我完成购买。购买完成后,如果我再次请求 SKU 详细信息,则该产品将被报告为已拥有。所以购买过程本身按预期进行。
没有用的是购买通知本身。我传递给 launchPurchaseFlow
的 OnIabPurchaseFinishedListener
永远不会被调用。无论是取消购买还是完成购买。
我打开 IabHelper
class 的日志记录并在 LogCat 中得到以下输出:
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
到此结束。
我的 activity 在对话框再次消失时收到一个 onPause()
event when the purchase dialog is shown and an onResume()
事件(如果购买被取消或完成)。这两个事件目前在我的应用程序中除了 System.out.println(...)
.
这是 API 中的错误吗?或者我需要先设置什么吗?任何帮助将不胜感激。
挖掘 IabHelper
的源代码,我发现了问题:
购买意向的结果将发送到 Activity 的 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);
}
这解决了购买成功和失败的问题。
"Yay!" 综合文档...