Ich folgte einem Tutorial, In-App-Abrechnung Elemente zu kodieren und ich schaffe es, alles gut zu machen, aber wenn ich wissen möchte, ob der Benutzer einen Artikel gekauft hat, ist es immer falsch, sogar wenn ich es mit anderen Geräten teste, die einen Beta-Tester-Account haben.Android In-App-Abrechnung gekaufte Artikel
Dies ist, was ich benutze das Produkt gekauft zu erhalten:
mHelper = new IabHelper(MainActivity.this, base64EncodedPublicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
IabHelper.QueryInventoryFinishedListener mGotInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (result.isFailure()) {
// handle error here
}
else {
// does the user have the premium upgrade?
boolean mIsPremium = inventory.hasPurchase(ITEM_SKU);
// update UI accordingly
Toast.makeText(getApplicationContext(), "" + mIsPremium, Toast.LENGTH_LONG).show();
if(mIsPremium){
buy.setVisibility(View.INVISIBLE);
}
}
}
};
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
Und das ist der Code, die Artikel zu kaufen:
buy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001,
new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (result.isFailure()) {
return;
} else if (purchase.getSku().equals(ITEM_SKU)) {
mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
} else {
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
buy.setVisibility(View.GONE);
} else {
}
}
});
}
}
});
}
}
}, "mypurchasetoken");
}
});
Wenn ich die App in einem realen Gerät mit dem Test Bei meinen Beta-Testern funktioniert der Code gut, wenn Sie den Artikel kaufen, aber wenn ich die App schließe und sie wieder öffne, sagt der erste Code, dass das Konto den Artikel nicht gekauft hat.
Während dies wahrscheinlich die Antwort ist, sollte dies ein Kommentar sein, der zusätzliche Informationen anfordert? Du antwortest mit einer Frage. – Bonatti
Ich kann umformulieren zu "Sie verbrauchen wahrscheinlich die Produkte ...", wäre das besser? – marmor
Ich glaube es so. Grundsätzlich kann ein anderer Benutzer, der diese Antwort überprüft, die "wahrscheinlichsten" Probleme sehen, die er möglicherweise hat. Ein Verbrauchsartikel würde nicht als Codefehler erscheinen, würde aber das gleiche Verhalten zeigen. – Bonatti