Je tente d'implémenter Google Play, achat in-app v3 , après l'avoir implémenté avec succès dans la v2. Cependant, chaque fois que j'essaie d'acheter l'un de mes véritables produits intégrés à l'application, l'erreur de suivi suivante s'affiche:
IAB a renvoyé null purchaseData ou dataSignature (réponse -1008: erreur inconnue)
Cela vient de la classe IabHelper.Java, ligne 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;
}
J'ai vérifié que a) mon application est signée, b) que la version de mon application correspond au brouillon de version # sur le Google Play Store, et c) que l'utilisateur qui tente l'achat a été ajouté en tant qu'utilisateur test. J'ai essayé cela sur 3 comptes de test et 4 types d'abonnement d'achat intégrés à l'application.
J'ai eu ce problème moi-même. Après un moment, j'ai trouvé ce que j'avais mal fait. J'appelais la mauvaise méthode sur IABHelper.
Si vous appelez mHelper.launchPurchaseFlow(...)
avec une SKU enregistrée en tant qu'abonnement sur la console pour les développeurs Google, le message d'erreur suivant s'affichera: IAB a renvoyé null purchaseData ou dataSignature (réponse -1008: erreur inconnue).
Si vous avez une SKU enregistrée en tant qu'abonnement, vous devez utiliser la méthode: mHelper.launchSubscriptionPurchaseFlow(...)
à la place.
J'espère que cela t'aides.
erreur d'achat: iabResult: IAB a renvoyé la valeur d'achat nulle Données ou signature de données (réponse: -1008 erreur inconnue)
si vous obtenez l'erreur ci-dessus lorsque vous utilisez la méthode launchPurchaseFlow () et obtenez cette erreur, vérifiez le type de votre produit. J'avais créé des abonnements mais j'avais besoin de produits gérés, par exemple Type de produit non consommable. Je veux dire, soyez prudent dans vos achats ou vos abonnements
Pour les applications Cordova et hybrides, vous devez utiliser la méthode this.iap.subscribe(this.productId)
en abonnement InAppPurchase
.
Voici le code qui fonctionne bien pour moi:
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);
});
})
}