2017-05-11 1 views
1

Auf Android, ich versuche herauszufinden, wie ich mein Abonnement im App-Kauf zu aktualisieren. So tun, als ob ich 3 Abonnement-Typ Tier 1, 2 und 3 habe. Ich kaufe meine erste Abonnement Tier 1 mit dieser Methode getBuyIntent und dann diese Methode gibt ein Bündel mit einem Schlüssel RESPONSE_CODE und einem Schlüssel BUY_INTENT zurück.Gelöste IAP Android Probleme versuchen, Abonnement mit getBuyIntentExtraParams nicht zurück zu kaufen BUY_INTENT Schlüssel

Dann mit diesem Bündel mache ich ein bundle.getParcelable ("BUY_INTENT"); was einen PendingIntent zurückgibt und alles gut ist.

Aber wenn ich von Tier 1 bis Tier zu aktualisierende 2 Ich brauche diese Methode getBuyIntentExtraParams verwenden nach dieser https://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent

Als ich getBuyIntentExtraParams verwenden, das Bündel, das zurückgegeben wird kein BUY_INTENT Schlüssel enthalten, aber es gibt INAPP_PURCHASE_ITEM_LIST, INAPP_PURCHASE_DATA_LIST und ein INAPP_DATA_SIGNATURE_LIST Schlüssel.

INAPP_PURCHASE_ITEM_LIST ist = [ „product.id.name.tier1“]

es also fast scheint wie getBuyIntentExtraParams zurückkehrt, was Sie bereits gekauft haben .., die an die Methode getPurchases sehr ähnlich ist().

Ich kann nicht bundle.getParcelable ("BUY_INTENT") für dieses Bundle tun, weil es diesen Schlüssel nicht hat. Ich habe gemerkt, dass in der Google Docs-Datei getBuyIntentExtraParams eine Variante von getBuyIntent ist, also nehme ich an, dass getBuyIntentExtraParams einen BUY_INTENT-Schlüssel zurückgeben soll.

Also frage ich mich, was soll ich tun, um diese Methode richtig zu verwenden? Ich bemerkte, dass es ein Problem mit Google über die Dokumentation: https://issuetracker.google.com/issues/37140925

Hier ist mein Code:

Arraylist skus = new Arraylist();

skus.add ("product.id.name.tier1");

Bundle extraBundle = neues Bundle();

extraBundle.putStringArrayList ("skusToReplace", skus);

getBuyIntentExtraParams (7, "app.package.name", "subs", "product.id.name.tier2", DEVELOPER_PAYLOAD, extraBundle);

Beachten Sie, wie das 3. Argument "subs" sein soll, wo das 4. Argument "product.id.name.tier2" ist und umgekehrt nach dem Dokument. Aber wenn ich das mache, klagt es und sagt, dass es nicht weiß, welcher Elementtyp product.id.name.tier2 ist. Also ich denke, der Doc ist nicht richtig.

PS: Ich habe auch versucht 6 zu setzen statt 7 (api Version) kein Glück

ich meine wichtigste Frage erraten ist, wie kann ich GetBuyIntentExtraParams anders als getBuyIntent benutzen?

Ich verwende Sdk min und Ziel 19 BTW.

Ich habe auch festgestellt, dass ich dies nicht in meiner InAppBillingService.aidl Datei isBillingSupportedExtraParams.

UPDATE:

Ich habe diese in mein InAppBillingService.aidl-Datei:

Bündel getBuyIntentToReplaceSkus (int apiVersion, String Paketname, in Liste oldSkus, String newSku, String-Typ, String developerPayload);

Dann rief ich das anstelle von getBuyIntentExtraParams und es hat funktioniert!

Ich frage mich nur, ist dies die richtige Methode zu nennen?

Antwort

0

Ich kann bestätigen, dass getBuyIntentToReplaceSkus die richtige Methode zum Aktualisieren und Downgrade von Abonnements ist.

1

Um die ursprüngliche Frage zu beantworten, wie man getBuyIntentExtraParams verwendet, fand ich heraus, dass Sie die tatsächliche aidl-Datei von Google kopieren und Ihre aidl-Datei ersetzen müssen. Kopieren Sie nicht den Code in Google's Hilfe und ersetzen Sie Ihren Code.

Neueste aidl-Datei von Google: https://github.com/googlesamples/android-play-billing/blob/0154723d8c97011fb5ce0163d55b496cb5ebccb7/TrivialDrive/app/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl

Verwandte Themen