我的onIabPurchaseFinishedListener
永远不会被调用,即使我在inapp对话框中单击立即购买,logcat也不会打印任何内容。
public class CreateAlbumActivity extends Activity {
IabHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_album);
mHelper = new IabHelper(this, Global.inapp);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh noes, there was a problem.
// AlertDialogHelper.CreateNormalDialog(context, "Failed to set In-App Billing: " +result);
Log.d(Global.TAG, "Problem setting up In-app Billing: " + result);
return;
}
// Hooray, IAB is fully set up!
}
});
}
public void createAlbumEvent(){
mHelper.launchPurchaseFlow(CreateAlbumActivity.this, "android.test.purchased", 10001,
mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq");
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase)
{
if (result.isFailure()) {
Log.d(Global.TAG, "Error purchasing: " + result);
return;
}
Log.d(Global.TAG, "SUCCESS PURCHASE!");
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(Global.TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!mHelper.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(Global.TAG, "onActivityResult handled by IABUtil.");
}
}
}
答案 0 :(得分:8)
好的,所以在花了几个小时试图解决这个问题后,我发现了以下答案:https://stackoverflow.com/a/17411617/1203043
问题是我的活动有一个“没有历史”的旗帜。如果我从活动中删除此标志,它就可以正常工作。我真的不知道它为什么会发生,但现在就是。
希望你们永远不会经历我经历过的噩梦。
答案 1 :(得分:4)
我发现以下链接有帮助: onIabPurchaseFinished never called.
问题是Activity没有正确处理onActivityResult,并且在In App Purchasing教程中没有提及它。
答案 2 :(得分:1)
我遇到的问题是因为我使用了片段而且 onActivityResult 直到我从父活动手动调用它才被调用。 如果有人面临同样的问题,我提供了答案here!