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, и у меня есть (он работает), но я не считаю это действительным сквозным тестом.
Ответы
Ответ 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);
});
})
}