Подтвердить что ты не робот

Google Play In-App Purchase возвращает код ошибки -1008: null puchaseData или dataSignature

Я пытаюсь реализовать покупку Google Play в приложении v3, после ее успешного внедрения в версии v2. Однако каждый раз, когда я пытаюсь приобрести один из моих реальных продуктов в приложении, я получаю следующую последующую ошибку:

IAB вернул null purchaseData или dataSignature (ответ -1008: неизвестная ошибка)

Это происходит из класса IabHelper.java, строка 452:

if (purchaseData == null || dataSignature == null) {
    logError("BUG: either purchaseData or dataSignature is null.");
    logDebug("Extras: " + data.getExtras().toString());
    result = new IabResult(IABHELPER_UNKNOWN_ERROR, "IAB returned null purchaseData or dataSignature");
    if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null);
    return true;
}

Я подтвердил, что: а) мое приложение подписано, б) версия моего приложения соответствует черновику версии # в магазине Google Play и в) пользователь, пытающийся совершить покупку, был добавлен в качестве тестового пользователя. Я пробовал это через 3 тестовых аккаунта и 4 типа подписки на покупку в приложении.

  • Должен ли я быть обеспокоен этим кодом ошибки?
  • Является ли это проблемой, ограничивающей только выпуски, не связанные с производством?
  • Это повлияет на моих клиентов в поле, если/когда я выпущу эту версию?
  • Можете ли вы действительно протестировать только приложение для покупок через приложение, когда вы действительно опубликовали его в прямом эфире с IAB-версией 3? Я понимаю, что могу использовать тип android.test.purchased, и у меня есть (он работает), но я не считаю это действительным сквозным тестом.
4b9b3361

Ответ 1

У меня была эта проблема. Через некоторое время я обнаружил, что я сделал не так. Я вызывал неправильный метод на IABHelper.

Если вы вызываете mHelper.launchPurchaseFlow(...) с SKU, зарегистрированным как подписка на Google Developer Console, это приведет к ошибке: IAB вернул null purchaseData или dataSignature (ответ -1008: неизвестная ошибка).

Если у вас есть SKU, зарегистрированный как подписка, вы должны использовать этот метод: mHelper.launchSubscriptionPurchaseFlow(...).

Надеюсь, что это поможет.

Ответ 2

ошибка покупки: iabResult: IAB вернул пустую покупку Данные или данные Подпись (ответ: -1008 неизвестная ошибка)

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

Ответ 3

Для приложений Cordova и Hybrid необходимо использовать this.iap.subscribe(this.productId) для подписки InAppPurchase.

Ниже код работает нормально для меня:

 getProdutIAP() {
        this.navCtrl.push('subscribeDialogPage');
        this.iap
            .getProducts(['productID1']).then((products: any) => {
                this.buy(products);
                // alert('getProdutIAP' + JSON.stringify(products));
            })
            .catch((err) => {
                console.log(JSON.stringify(err));
                alert('Finished Purchase' + JSON.stringify(err));
                console.log(err);
            });
    }

    buy(products: any) {
        // this.getProdutIAP();
        // alert(products[0].productId);
        this.iap.subscribe(products[0].productId).then((buydata: any) => {
            alert('buy Purchase' + JSON.stringify(buydata));
            // this.sub();
        }).catch((err) => {
            // this.navCtrl.push('subscribeDialogPage');
            alert('buyError' + JSON.stringify(err));
        });
    }

    sub() {
        this.platform.ready().then(() => {
            this.iap
                .subscribe(this.productId)
                .then((data) => {
                    console.log('subscribe Purchase' + JSON.stringify(data));
                    alert('subscribe Purchase' + JSON.stringify(data));
                    this.getReceipt();
                }).catch((err) => {
                    this.getReceipt();
                    alert('subscribeError' + JSON.stringify(err));
                    console.log(err);
                });
        })
    }