IabHelper PurchaseFinishedListener
Если я отправляю намерение совершить покупку через стандартный
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
Это два последних метода, которые вызываются, и после этого, когда я заканчиваю покупку, он не вызывает покупкуfinishedlistener
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();
}
};
Ничего из журнала до конца не работает. Есть ли что-то, что я просто как-то не хватает?
Ответы
Ответ 1
Я узнал, как это исправить. Внедрите handleActivityResult в onActivityResult. Ему необходимо было создать мост между слушателем и запущенным потоком покупок.
Ниже приведен код, который я использовал:
@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.");
}
}
Ответ 2
AndroidPenguin, я столкнулся с той же проблемой, что и вы, но у меня правильно задан параметр activityresult, и все же моя покупка не была выполнена.
Вот мой 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 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);
}
Ответ 3
В моем случае он работает
попробуйте вот так,
дождитесь, когда этот диалог google будет закрыт. Затем слушатель будет вызван
Ответ 4
Для тех из вас, у кого была такая же проблема, я испытывал...
Я просто сделал свою переменную-член IabHelper статической, и это исправило проблему.
Я уже добавил код AndroidPenguin и все еще получал сбои от нулевого IabHelper, после того как я купил элемент (так что onActivityResult никогда не имел возможности вызвать handleActivityResult, потому что mHelper был нулевым).