Je suis en œuvre En Application de Facturation pour la première fois et je suis en essais mes premiers achats à l'aide de la statique SKU id.
Ça a très bien fonctionné la première fois. J'ai appelé mHelper.launchPurchaseFlow(...)
et complété le test de l'achat. Mon activité a reçu l' onActivityResult
de rappel et j'ai fait en sorte de le traiter avec un mHelper.handleActivityResult(...)
. Tout a été parfait.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Pass on the activity result to the helper for handling
log("onActivityResult");
if (!this.mHelper.handleActivityResult(requestCode, resultCode, data)) {
log("cleared the launch flow");
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
}
}
Cependant, j'ai voulu tester la prochaine partie, j'ai donc relancé l'application et a essayé d'acheter la même SKU (statique purchased
SKU).
mHelper.launchPurchaseFlow(rootActivity, "android.test.purchased", 10002,
new IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase purchaseInfo) {
if (result.isFailure()) {
log("purchased failed");
} else {
log("purchase succeeded");
}
}
}, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
La deuxième fois que j'essaie d'acheter l'article, mon OnIabPurchaseFinishedListener
est appelé et je vois purchase failed
dans mon journal: "Dans l'application de facturation d'erreur: Impossible d'acheter l'article, Erreur de réponse: 7:l'Élément est Déjà Possédée"
Ce qui est logique, mais si j'essaie d'en acheter un autre élément, puis mon application se bloque avec le message d'erreur suivant:
java.lang.IllegalStateException: ne Peut pas démarrer opération asynchrone (launchPurchaseFlow) car un autre async opération(launchPurchaseFlow) est en cours.
L' onActivityResult
de rappel ne se produit pas lorsque j'essaie de faire l'achat d'échec, de sorte que le lancement de flux de qui a échoué, n'obtient pas traitées et nettoyées. Donc, quand j'ai essayer un autre achat, c'est pourquoi il se bloque parce que c'est toujours soi-disant dans le milieu de la dernière transaction a échoué.
Ce que je fais mal? Comment puis-je m'assurer que les launchPurchaseFlow() est nettoyée après un échec?