如果我通过标准发送购买意向
String mySku = "android.test.purchased";
mHelper.launchPurchaseFlow(this, mySku, 10001, mPurchaseFinishedListener);
我可以购买该商品,它将存储,我可以查询该项目,这也很好。唯一不起作用的是PurchaseFinishedListener。我的编码与示例应用程序非常相似,但它似乎根本没有被调用。
12-12 01:40:47.248: D/IabHelper(23502): Calling getPurchases with continuation token: null
12-12 01:40:50.116: D/IabHelper(23502): Starting async operation: launchPurchaseFlow
这是最后两个被调用的方法,之后当我完成购买时,它不会调用purchasefinishedlistener
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: "
+ purchase);
if (result.isFailure()) {
complain("Error purchasing: " + result);
// setWaitScreen(false);
return;
}
if (purchase.getSku().equals(mySku)) {
Log.d(TAG, "mySku is being consumed.");
mHelper.consumeAsync(purchase, mConsumeFinishedListener);
}
Log.d(TAG, "Purchase successful.");
new AsyncQuestionsActivity().doInBackground();
}
};
从日志到最终都没有作用。有什么我只是在某种程度上失踪了吗?
答案 0 :(得分:50)
我发现了如何修复它。在onActivityResult中实现handleActivityResult。需要在侦听器和已启动的购买流之间建立桥梁。
以下是我使用的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + ","
+ data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
答案 1 :(得分:5)
AndroidPenguin,我遇到了和你一样的问题,但我正确设置了activityresult,但我的purchasefinishedlistener却没有执行。
这是我的onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (SettingsManager.getBooleanSetting(rootId, "inapppurchase", false)){
Log.d(TAG, "take care of activity result with billing helper");
if (!mBillingService.handleActivityResult(requestCode, resultCode, data)) {
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
}
else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
else
super.onActivityResult(requestCode, resultCode, data);
}
答案 2 :(得分:1)
就我而言,它正在发挥作用 试试这样, 等到谷歌播放对话框关闭。然后,听众将被调用
答案 3 :(得分:-1)
对于那些遇到同样问题的人我正在经历......
我刚刚将我的成员变量IabHelper设为静态,这解决了问题。
我已经添加了AndroidPenguin的代码,并且在我购买了一个项目之后仍然从null IabHelper崩溃(所以onActivityResult从来没有机会调用handleActivityResult,因为mHelper为null)。