OnIabPurchaseFinished никогда не звонил.

Я пытаюсь настроить биллинг в приложении для своего первого приложения и использую android.test.purchased sku. Покупка прошла, и мне удалось получить SKU в мой инвентарь, но, как гласит название, onIabPurchaseFinished никогда не вызывается.

Я думаю, что это может иметь какое-то отношение к этому журналу: "Не удалось сохранить, какой вид имеет фокус, потому что сфокусированный вид [email protected] не имеет идентификатора". Это всплывает, прямо перед тем, как перейти в Google Play. Я не совсем уверен, что это значит, хотя...

Запуск покупки:

mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");

И слушатель:

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {

    @Override
    public void onIabPurchaseFinished(IabResult result, Purchase info) {
        System.out.println("Purchase Finish heard something");

        if (result.isFailure()) {
             Log.d(TAG, "Error purchasing: " + result);
             return;
        } else{
                Log.d(TAG,"Success!");
             }


    }
};

Ответ 1

Попробуйте добавить это к Activity, который вызывает mHelper.launchPurchaseFlow(..):

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(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 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.");
    }
}

Ответ 2

Я только что узнал еще одну важную вещь: requestCode, который используется для запуска потока покупки, должен быть >= 0!

я использовал "new Random(). nextInt()" для генерации случайного кода запроса, и иногда он работал, иногда это не так. теперь я узнал в следующей документации, что requestCode не должен быть отрицательным числом:

http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29