EDIT: da einige Leute immer noch diesen Thread auschecken, möchte ich erwähnen, dass dies sehr veraltet ist, weil es über v2 in App-Kauf ist, was ist jetzt veraltet. Bitte überprüfen Sie die latest (derzeit v3) -Dokumentation, es ist ziemlich einfachGoogle Play Billing - Unterschrift Überprüfung fehlgeschlagen für sku android.test.purchased
Es gibt viele Threads zu diesem Thema, und ich denke, ich verstehe das Problem, aber im Moment kann ich nicht mit realen Käufen testen, seit ich Habe derzeit keine gültige Kreditkarte, was Google akzeptiert, nur ein Maestro, der nicht akzeptiert wird. Deshalb bitte ich um Hilfe (keine Kaufbestätigung, sondern Bestätigung, dass mein Denkprozess gut ist).
Zunächst kommt das Problem von der neuen verifyPurchase
Methode. Die neue Methode prüft auf Signaturen, was in Ordnung sein sollte. Google stellt jedoch keine Signatur für Test-IDs bereit, z. B. android.test.purchased
. Dies führt dazu, dass die unten beschriebene Methode immer fehlschlägt, und wird immer falsch bei der Verifizierung zurückgegeben, selbst wenn der gefälschte Kauf abgeschlossen wurde, und ich hatte einen Bestätigungsdialog, dass der Kauf tatsächlich erfolgreich ist. Die Methode:
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
//if(BuildConfig.DEBUG) return true;
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
Das Problem kommt von den TextUtils.isEmpty()
überprüft, da die Unterschrift leer sein wird, wird der Code falsch zurück. Meine temporäre Testumgehung ist im Code enthalten und auskommentiert. Wenn ich die if(BuildConfig.DEBUG) return true;
am Anfang der Methode zum Testen hinzufüge, funktioniert alles gut, der Benutzer bekommt die Premium-Funktionen und läuft, so ist das Problem in der Tat über Signaturen.
Ein weiteres Problem ist, wenn ich android.test.purchased
kaufe, kann ich das Inventar des Benutzers nicht abfragen, so kann ich nicht sicher sein, dass meine Checker-Methode, die überprüft, ob der Benutzer die Premium-Funktion gekauft hat, funktioniert.
Meine zwei Fragen:
Wenn ich die if(BuildConfig.DEBUG) return true;
Linie von verifyPurchase
, entfernen und ersetzen Sie die android.test.purchased
-ID mit der realen ID des realen SKU Ich biete an, kann ich sicher alles richtig in meinem Fall sein wird, arbeiten? Ich wiederhole, mit der zusätzlichen Debug-Funktionalität funktioniert alles gut. Wenn Sie mehr Code benötigen, lassen Sie es mich wissen!
Die folgende Methode überprüft, ob der Benutzer die Premium-Funktion gekauft hat, wenn er/sie hat, dann legt er die entsprechenden Einstellungen fest, andernfalls, wenn etwas in den Süden geht, lässt es alles so wie es ist. Ist diese Methode korrekt? Ich mache das in der Application
Klasse, bei jedem Start der App, um das Basteln zu verhindern.
private void checkPremium()
{
//get the helper up and running
final IabHelper helper=new IabHelper(INSTANCE, getBase64Key());
helper.startSetup(new IabHelper.OnIabSetupFinishedListener()
{
@Override
public void onIabSetupFinished(IabResult result)
{
//if the helper is in a correct state, check the inventory
if(result.isSuccess())
{
helper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener()
{
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inv)
{
//if the inventory is reachable, check if we got the premium
if(result.isSuccess())
{
setPremium(inv.hasPurchase(ActWidgetSearch.SKU));
}
}
});
}
}
});
}
Vielen Dank im Voraus!
versuchen, diese von Ihnen in Bezug auf Test, um In-App-Kauf http://stackoverflow.com/a/22088718 –