Android In-app billing error: Незаконное состояние для работы (launchPurchaseFlow): помощник IAB не настроен

Я попытался настроить покупки InApp для пожертвования с помощью руководства, предоставленного Google, но когда я вызываю действие (которое должно возвратиться, если оно было успешным или нет), но оно вызывает эту ошибку:

In-app billing error: Illegal state for operation (launchPurchaseFlow): IAB helper is not set up 

Эта деятельность называется с помощью этого метода:

 public boolean donation() { int success = 0; Intent intent = new Intent(Main.this, Donate.class); startActivityForResult(intent, success); if (success != 0) { return true; } else return false; } 

И класс Donate (который я пробовал кодировать с помощью гида) выглядит так:

 import java.math.BigInteger; import java.security.SecureRandom; import maturaarbeit.nicola_pfister.marks.R; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.util.Log; public class Donate extends Activity { IabHelper mHelper; private static final String TAG = "Donate"; private String payload; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String base64EncodedPublicKey = getKey(); mHelper = new IabHelper(this, base64EncodedPublicKey); mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { @Override public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { Log.d(TAG, "Problem setting up In-app Billing: " + result); } } }); SharedPreferences prefs = getSharedPreferences(getPackageName() + "_preferences", MODE_PRIVATE); //Add shared preferences payload = prefs.getString("devpayload", null); if (payload == null) { payload = getPayload(); Editor editor = prefs.edit(); editor.putString("devpayload", payload) .apply(); } mHelper.launchPurchaseFlow(this, "donation_1chf", 1, mPurchaseFinishedListener, payload); finish(); } IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { @Override public void onIabPurchaseFinished(IabResult result, Purchase info) { if (result.isFailure()) { Log.d(TAG, "Error purchasing: " +result); return; } else if (info.getDeveloperPayload().equals(payload)) { return; } } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { super.onActivityResult(requestCode, resultCode, data); } else { Log.i(TAG, "onActivityResult handled by IABUtil."); } } private String getKey() { //Code for building public key } private String getPayload() { SecureRandom random = new SecureRandom(); { return new BigInteger(130, random).toString(32); } } @Override protected void onDestroy() { if (mHelper != null) mHelper.dispose(); mHelper = null; super.onDestroy(); } 

}

Предполагается генерировать полезную нагрузку dev, которая хранится в общих привилегиях, если их еще нет. Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

Спасибо за вашу помощь!

Вы должны дождаться возвращения onIabSetupFinishedListener до вызова launchPurchaseFlow – переместите эти строки в свой onIabSetupFinished метод onIabSetupFinished чтобы убедиться, что настройка IabHelper завершена:

 mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { @Override public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { Log.d(TAG, "Problem setting up In-app Billing: " + result); } else { // Only launch the purchase flow if setup succeeded mHelper.launchPurchaseFlow(Donate.this, "donation_1chf", 1, mPurchaseFinishedListener, payload); } } }); 

Вы должны использовать реальное устройство для биллинга приложений, потому что при использовании эмулятора некоторые параметры являются нулевыми, и это приводит к ошибкам во время выполнения.

Intereting Posts
Как я могу запустить приложение для Android в автоматическом режиме, когда приходит электронное письмо? Android: настройка onClickListener на часть текста в TextView – проблема Цель камеры не работать с Samsung Galaxy S3 Android AVD на Eclipse показывает «Пустой экран» без активности Должен ли я удалить e.printStackTrace () из моего кода перед публикацией Как начать работу по завершению анимации Импорт пакетов android не может быть разрешен TYPE_KEYGUARD сохраняет полноэкранный режим после размещения вызова Ионная ошибка при обработке действия! Попытка вернуться Как получить правильные координаты X, Y для DragEvent.ACTION_DROP Календарь Действие для просмотра недели и дневного просмотра Настройка фокуса сверху scrollview после того, как действие происходит с Android Значок уведомлений с новой системой обмена облаками Firebase Как сохранить CustomDialog, когда его деятельность завершена? Как приостановить / скрыть поток или процесс в Android?