web-dev-qa-db-fra.com

L'achat intégré à l'application Google Play renvoie le code d'erreur -1008: null puchaseData ou dataSignature

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.

  • Devrais-je m'inquiéter de ce code d'erreur?
  • Ce problème concerne-t-il uniquement les versions non destinées à la production?
  • Est-ce que cela affectera mes clients sur le terrain si/quand je publie cette version?
  • Pouvez-vous vraiment tester les achats intégrés de bout en bout une fois que vous les avez publiés en direct avec IAB version 3? Je me rends compte que je peux utiliser le type d’élément Android.test.purchased, et je l’ai (cela fonctionne), mais je ne considère pas qu’il s’agisse d’un test de bout en bout valide.
25
esilver

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.

65
tobalr

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

1
ethemsulan

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);
                });
        })
    }
0