2014-03-26 7 views
5

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!

+0

versuchen, diese von Ihnen in Bezug auf Test, um In-App-Kauf http://stackoverflow.com/a/22088718 –

Antwort

3

Ich war vor ein paar Tagen mit der gleichen Frage konfrontiert. Wenn die Test-ID ("android.test.purchased") wie von Ihnen beschrieben funktioniert, können Sie Ihre In-App-Käufe kaufen, wenn Sie Ihre Live-Anwendung von Google Play herunterladen. Google Play behandelt dasselbe wie ein "echter Kauf" und es wird derselbe Kanal wie Ihre persönlichen SKUs durchlaufen. Siehe unten:

Testkäufe (In-App-Abrechnung Sandbox)

einmal mit Testzugang berechtigt ist, können die Benutzer der Seite-laden Sie Ihre App und testen Sie den vollen Merchandising, Einkauf und Erfüllung Fluss für deine Produkte. Testkäufe sind echte Bestellungen und Google Play verarbeitet sie auf dieselbe Weise wie andere Bestellungen.Nach Abschluss der Käufe verhindert Google Play, dass die Bestellungen in die Finanzverarbeitung übergehen. Dadurch wird sichergestellt, dass für Nutzerkonten keine tatsächlichen Kosten anfallen, und die abgeschlossenen Bestellungen werden automatisch nach 14 Tagen storniert.

http://developer.android.com/google/play/billing/billing_testing.html#test-purchases

ich meine eigene persönliche SKUs jetzt gerade getestet und ich kann für eine Tatsache, sagen sie arbeiten! (Ich habe die Bestellung in meinem Google Merchant-Konto gesehen.) Also gehen Sie hin und dort, und machen Sie etwas Geld :)

Nebenbei bemerkt, Entwickler zu Entwickler ... können Sie mir Beispiele oder Links zu Tutorials zeigen, wie Sie meine Kaufprüfung in der Application-Klasse ausführen? Ich denke, das ist eine Idee, die ich definitiv von dir stehlen möchte. Prost!

+0

Danke für die Antwort, es in der Tat funktioniert, und mein In-App-Kauf lebe für eine gute Weile. Ich habe meine Lösungen ausgeschnitten und eingefügt unter folgendem Link: http://pastebin.com/xmCAJGNb. In meiner Lösung ist jede Methode Teil der Application-Klasse. Prost! – hundeva

+0

Wird diese Antwort als richtig akzeptiert? –

1

Stellen Sie sicher, dass Sie mit dem richtigen Benutzer an Ihrem Telefon angemeldet sind oder z. Fügen Sie das Google-Konto Ihres Telefons als Testbenutzer in der Entwicklerkonsole hinzu.

http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static:

In einigen Fällen kehren die reservierten Artikel statische Antworten unterzeichnet können, die Sie testen Signaturprüfung in Ihrer Anwendung können. Die reservierten Elemente geben nur signierte Antworten zurück, wenn der Benutzer, der die Anwendung ausführt, über ein Entwickler- oder Testkonto verfügt.

Verwandte Themen