In diesem Leitfaden wird beschrieben, wie Sie die APIs einbinden, um eine alternative Abrechnung anzubieten die Nutzerauswahl in Ihrer App.
Play Billing Library einrichten
Füge deiner Android-App die Play Billing Library-Abhängigkeit hinzu. So verwenden Sie die APIs zur alternativen Abrechnung müssen Sie Version 5.2 oder höher verwenden. Bei Bedarf von einer früheren Version zu migrieren, folgen Sie der Anleitung in der Migration , bevor Sie die alternative Abrechnung implementieren.
Mit Google Play verbinden
Die ersten Schritte des Integrationsprozesses sind dieselben wie im im Integrationsleitfaden für Google Play Billing beschrieben. BillingClient initialisieren:
- Sie müssen eine neue Methode aufrufen, um anzugeben, dass Sie dem Nutzer eine
Auswahl der Abrechnungsoptionen:
enableUserChoiceBilling
. - Für die Bearbeitung von Anfragen müssen Sie eine
UserChoiceBillingListener
registrieren der Nutzer ein alternatives Abrechnungssystem auswählt.
Im folgenden Beispiel sehen Sie, wie ein BillingClient
mit diesen
Änderungen:
Kotlin
val purchasesUpdatedListener =
PurchasesUpdatedListener { billingResult, purchases ->
// Handle new Google Play purchase.
}
val userChoiceBillingListener =
UserChoiceBillingListener { userChoiceDetails ->
// Handle alternative billing choice.
}
var billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableUserChoiceBilling(userChoiceBillingListener)
.build()
Java
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
// Handle new Google Play purchase.
}
};
private UserChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
@Override
public void userSelectedAlternativeBilling(
UserChoiceDetails userChoiceDetails) {
// Handle new Google Play purchase.
}
};
private BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableUserChoiceBilling(userChoiceBillingListener)
.build();
Nach dem Initialisieren des BillingClient
müssen Sie eine Verbindung mit
Google Play, wie im Integrationsleitfaden beschrieben.
Verfügbare Produkte anzeigen
Sie können dem Nutzer verfügbare Produkte auf dieselbe Weise anzeigen wie mit einem Integration des Google Play-Abrechnungssystems. Wenn der Nutzer die Produkte gesehen hat zum Kauf verfügbar ist und ein Produkt zum Kauf auswählt, starten Sie die Abrechnung mit Auswahlmöglichkeit für Nutzer. wie im folgenden Abschnitt beschrieben.
Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer starten
Starten Sie den Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer durch Aufrufen von launchBillingFlow()
. Das funktioniert
Dies entspricht dem Starten eines Kaufvorgangs mit einem Abrechnungssystem von Google Play.
Integration: Sie stellen eine ProductDetails
-Instanz und eine offerToken
-Instanz bereit.
dem Produkt und dem Angebot entsprechen,
das die Nutzenden erwerben möchten. Wenn
der Nutzer das Abrechnungssystem von Google Play auswählt, werden diese Informationen verwendet,
um den Kaufvorgang fortzusetzen.
Wenn Entwickler launchBillingFlow()
aufrufen, das Google Play-Abrechnungssystem
führt folgende Prüfung durch:
- Das System prüft, ob die Google Play-Landesversion des Nutzers
Land, das eine alternative Abrechnung mit Auswahlmöglichkeit für Nutzer unterstützt (d.h. ein unterstütztes Land
Land). Wenn das Google Play-Land des Nutzers unterstützt wird, prüft Google Play
ob die alternative Abrechnung auf Grundlage der Konfiguration des
BillingClient
.- Wenn die alternative Abrechnung mit Auswahlmöglichkeit für Nutzer aktiviert ist, wird der Kauf der Nutzerauswahl-UX zeigt.
- Wenn die alternative Abrechnung mit Auswahlmöglichkeit für Nutzer nicht aktiviert ist, wird der Kauf zeigt die Benutzeroberfläche des standardmäßigen Google Play-Abrechnungssystems ohne Nutzer eine große Auswahl.
- Wenn das Google Play-Land des Nutzers kein unterstütztes Land ist, Der Kaufvorgang zeigt die Benutzeroberfläche des standardmäßigen Google Play-Abrechnungssystems ohne Nutzer eine große Auswahl.
Die Google Play-Landesversion des Nutzers ist ein unterstütztes Land |
Die Google Play-Landesversion des Nutzers ist kein unterstütztes Land |
|
---|---|---|
"enableUserChoiceBilling" wird während der BillingClient-Einrichtung aufgerufen |
Der Nutzer sieht die UX mit Auswahlmöglichkeit für Nutzer |
Der Nutzer sieht das Standard-Abrechnungssystem von Google Play. |
"enableUserChoiceBilling" wird während der BillingClient-Einrichtung nicht aufgerufen |
Der Nutzer sieht das Standard-Abrechnungssystem von Google Play. |
Der Nutzer sieht das Standard-Abrechnungssystem von Google Play. |
Nutzerauswahl verwalten
Wie Sie den Rest des Kaufvorgangs abwickeln, hängt davon ab, Der Nutzer hat das Abrechnungssystem von Google Play oder ein alternatives Abrechnungssystem ausgewählt.
Wenn der Nutzer ein alternatives Abrechnungssystem auswählt
Wenn der Nutzer das alternative Abrechnungssystem auswählt, ruft Google Play die
UserChoiceBillingListener
, um die App zu benachrichtigen, dass die App gestartet werden muss.
im alternativen Abrechnungssystem. Insbesondere
Die Methode userSelectedAlternativeBilling()
wird aufgerufen.
Das externe Transaktionstoken, das im UserChoiceDetails
-Objekt bereitgestellt wird
steht für eine Signatur für die Entscheidung des Nutzers, die alternative Abrechnung einzugeben
Ablauf. Verwenden Sie dieses Token, um alle Transaktionen zu melden, die aus dieser Auswahl resultieren:
im Leitfaden zur Back-End-Integration erläutert.
UserChoiceBillingListener
sollte die folgenden Aktionen ausführen:
- Das Produkt bzw. die Produkte erhalten, die vom Nutzer gekauft werden, damit sie die während des Kaufvorgangs im alternativen Abrechnungssystem angezeigt werden.
- den als externes Transaktionstoken empfangenen String erfassen und an folgende Adresse senden: um sie dauerhaft zu speichern. Wird später verwendet, um externe Transaktion an Google Play, wenn der Nutzer diesen Kauf abschließt.
- Starten Sie den alternativen Kaufvorgang des Entwicklers.
Wenn der Nutzer den Kauf über das alternative Abrechnungssystem abschließt, müssen Sie
Sie müssen die Transaktion an Google Play melden, indem Sie den Google Play-Entwickler anrufen.
API innerhalb von 24 Stunden vom Back-End unter Angabe der
externalTransactionToken
und weitere Transaktionsdetails. Weitere Informationen finden Sie in der
Anleitung zur Backend-Integration.
Das folgende Beispiel zeigt, wie die
UserChoiceBillingListener
:
Kotlin
private val userChoiceBillingListener =
UserChoiceBillingListener { userChoiceDetails ->
// Get the products being purchased by the user.
val products = userChoiceDetails.products
// Send external transaction token to developer backend server
// this devBackend object is for demonstration purposes,
// developers can implement this step however best fits their
// app to backend communication.
devBackend.sendExternalTransactionStarted(
userChoiceDetails.externalTransactionToken,
user
)
// Launch alternative billing
// ...
// The developer backend handles reporting the transaction
// to Google Play's backend once the alternative billing
// purchase is completed.
}
Java
private userChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
@Override
public void userSelectedAlternativeBilling(
UserChoiceDetails userChoiceDetails) {
// Get the products being purchased by the user.
List<Product> products =
userChoiceDetails.getProducts();
// Send external transaction token to developer backend server
// this devBackend object is for demonstration purposes,
// developers can implement this step however best fits their
// app to backend communication.
devBackend.sendExternalTransactionStarted(
userChoiceDetails.getExternalTransactionToken(),
user
);
// Launch alternative billing
// ...
// The developer backend handles reporting the transaction
// to Google Play's backend once the alternative billing
// purchase is completed.
}
};
Wenn der Nutzer das Abrechnungssystem von Google Play auswählt
Wenn der Nutzer das Abrechnungssystem von Google Play auswählt, fährt er mit dem bei Google Play kaufen.
- Weitere Informationen findest du im Integrationsleitfaden für die Mediathek unter Käufe verarbeiten. Informationen zum Umgang mit neuen In-App-Käufen über die Abrechnungssystem.
- Weitere Informationen finden Sie unter Neue Abos im Leitfaden zur Aboverwaltung für zusätzliche Informationen zum Kauf von Abos.
Änderungen am Abo verarbeiten
Für Entwickler, die eine alternative Abrechnung mit Auswahlmöglichkeit für Nutzer verwenden, müssen Käufe
die entweder über das Abrechnungssystem von Google Play verarbeitet oder
externalTransactionId
, je nach Auswahl des Nutzers. Änderungen an vorhandenen
Abos, die durch den Ablauf
der Nutzerauswahl verarbeitet wurden,
bis zum Ablauf über dasselbe Abrechnungssystem laufen.
In diesem Abschnitt wird beschrieben, wie Sie mit einigen gängigen Szenarien bei Aboänderungen umgehen.
Upgrade- und Downgradeabläufe
Aboänderungen, einschließlich Upgrade- und Downgradeabläufen, sollten je nachdem, ob das Abo ursprünglich gekauft wurde oder nicht, über das Abrechnungssystem von Google Play oder ein alternatives Abrechnungssystem verwendet werden.
Für Add-ons, die von einem bestehenden Abo abhängen, wird dieselbe Zahlungsmethode verwendet
und wiederkehrende Gebühren werden
als Upgrades behandelt. Bei anderen Add-ons
das gewünschte Abrechnungssystem auswählen. Neuen Code starten
mit launchBillingFlow()
, wie unter Das
Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer.
Abos, die über ein alternatives Abrechnungssystem gekauft wurden
Für Abos, die ursprünglich über das nach Auswahl des Nutzers, Nutzer, die ein Upgrade anfordern, Das Downgrade muss über das alternative Abrechnungssystem des Entwicklers erfolgen ohne noch einmal mit der User-Choice-Option zu arbeiten.
Rufen Sie dazu launchBillingFlow()
auf, wenn der Nutzer ein Upgrade oder eine
ein Downgrade ausführen. Anstatt ein SubscriptionUpdateParams
-Objekt im Feld
Parameter, verwenden Sie setOriginalExternalTransactionId
und geben Sie die externe
Transaktions-ID des ursprünglichen Kaufs. Dadurch wird der Nutzer nicht
Auswahlbildschirm, da die Nutzerauswahl für den ursprünglichen Kauf beibehalten wird
für Upgrades und Downgrades. Der Aufruf von launchBillingFlow()
in diesem Fall
generiert ein neues externes Transaktionstoken für die Transaktion, das Sie
aus dem Callback abgerufen werden.
Kotlin
// The external transaction ID from the current
// alternative billing subscription.
val externalTransactionId = //... ;
val billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
listOf(
BillingFlowParams.ProductDetailsParams.newBuilder()
// Fetched via queryProductDetailsAsync.
.setProductDetails(productDetailsNewPlan)
// offerIdToken can be found in
// ProductDetails=>SubscriptionOfferDetails.
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
BillingFlowParams.SubscriptionUpdateParams.newBuilder()
.setOriginalExternalTransactionId(externalTransactionId)
.build()
val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.
Java
// The external transaction ID from the current
// alternative billing subscription.
String externalTransactionId = //... ;
BillingFlowParams billingFlowParams =
BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
ImmutableList.of(
ProductDetailsParams.newBuilder()
// Fetched via queryProductDetailsAsync.
.setProductDetails(productDetailsNewPlan)
// offerIdToken can be found in
// ProductDetails=>SubscriptionOfferDetails
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
SubscriptionUpdateParams.newBuilder()
.setOriginalExternalTransactionId(externalTransactionId)
.build()
)
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.
Wenn das Upgrade oder Downgrade im alternativen Abrechnungssystem abgeschlossen ist, Sie müssen mit dem externen Transaktionstoken eine neue Transaktion melden. die Sie durch den vorherigen Aufruf für den Kauf eines neuen Abonnements erhalten haben.
Abos, die über das Abrechnungssystem von Google Play gekauft wurden
Nutzer, die ihr aktuelles Abo über die Nach Auswahl der Nutzerauswahl sollte der Upgrade- oder Downgrade-Ablauf angezeigt werden. im Abrechnungssystem von Google Play. In der folgenden Anleitung wird beschrieben, wie würden Sie den Kaufvorgang für ein Upgrade oder Downgrade über Google Abrechnungssystem von Google Play:
- Ermitteln Sie die
offerToken
des ausgewählten Angebots für das neue Abo:
val offerTokenNewPlan = productDetailsNewPlan
.getSubscriptionOfferDetails(selectedOfferIndex)
.getOfferToken()
String offerTokenNewPlan = productDetailsNewPlan
.getSubscriptionOfferDetails(selectedOfferIndex)
.getOfferToken();
- Die richtigen Informationen an das Abrechnungssystem von Google Play senden, damit die neuen Kauf, einschließlich des Kauftokens für das bestehende Abo:
val billingFlowParams =
BillingFlowParams.newBuilder().setProductDetailsParamsList(
listOf(
BillingFlowParams.ProductDetailsParams.newBuilder()
.setProductDetails(productDetailsNewPlan)
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
BillingFlowParams.SubscriptionUpdateParams.newBuilder()
.setOldPurchaseToken(oldToken)
.setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE)
.build()
)
.build()
BillingClient.launchBillingFlow(activity, billingFlowParams)
BillingFlowParams billingFlowParams =
BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
ImmutableList.of(
ProductDetailsParams.newBuilder()
// Fetched via queryProductDetailsAsync
.setProductDetails(productDetailsNewPlan)
// offerIdToken can be found in
// ProductDetails=>SubscriptionOfferDetails.
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
SubscriptionUpdateParams.newBuilder()
// purchaseToken can be found in
// Purchase#getPurchaseToken
.setOldPurchaseToken("old_purchase_token")
.setReplaceProrationMode(ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE)
.build()
)
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
Der Kauf erfolgt über das Abrechnungssystem von Google Play und deine App erhält
den PurchasesUpdatedListener.onPurchaseUpdated
-Aufruf mit dem Ergebnis der
kaufen. Wenn der Kauf erfolgreich war, wird auch die Methode onPurchaseUpdated()
verwendet.
erhält die neuen Kaufinformationen und Ihr Backend empfängt
SUBSCRIPTION_PURCHASED
Entwicklerbenachrichtigung in Echtzeit. Wenn Sie die
Status des neuen Kaufs wird ein linkedPurchaseToken
-Attribut
Abonnementkauf, sodass Sie es als
empfohlen.
Abokündigungen und ‐reaktivierungen
Nutzer sollten ihr Abo jederzeit kündigen können. Wenn ein Nutzer ein Abo kündigt, kann sich die Kündigung der Berechtigung bis zum der Zahlungszeitraum endet. Beispiel: Ein Nutzer kündigt ein Monatsabo nach der Hälfte des Monats möglicherweise noch dauert es noch etwa 2 Wochen, bis ihr Zugriff entfernt wird. Während dieses Zeitraums das Abonnement noch technisch aktiv ist, sodass der Nutzer den Dienst verwenden kann.
Es ist nicht ungewöhnlich, dass die Nutzer sich während dieser aktive Periode. In dieser Anleitung wird dies als Wiederherstellung bezeichnet. Die folgenden wird in den Abschnitten beschrieben, wie Wiederherstellungen Billing API integriert.
Abos, die über ein alternatives Abrechnungssystem gekauft wurden
Wenn Sie eine externe Transaktions-ID für ein gekündigtes Abo haben, ist das nicht
launchBillingFlow()
aufrufen, um das Abo wiederherzustellen.
sollten nicht für diese Art der Aktivierung verwendet werden. Wenn ein Nutzer sein Konto
während der aktiven Laufzeit eines gekündigten Abos nicht verfügbar ist,
Transaktion zu diesem Zeitpunkt stattfindet; können Sie einfach die Verlängerungen melden,
läuft der aktuelle Zyklus aus und die nächste
Verlängerung findet statt. Dazu gehören auch Fälle, in denen
Der Nutzer erhält im Rahmen der Wiederherstellung ein Guthaben oder einen Sonderpreis für die Verlängerung.
(z. B. ein Angebot, das den Nutzer dazu ermuntert, sein Abo fortzusetzen).
Abos, die über das Abrechnungssystem von Google Play gekauft wurden
Im Allgemeinen können Nutzer Abos über das Abrechnungssystem von Google Play wiederherstellen. Für
gekündigte Abos, die ursprünglich über die Abrechnung bei Google Play abgeschlossen wurden.
kann der Nutzer die Kündigung rückgängig machen, solange das Abo abgeschlossen ist.
über die Google Play-Funktion Wieder abonnieren aktiv sind. In diesem Fall
eine SUBSCRIPTION_RESTARTED
Entwicklerbenachrichtigung in Echtzeit in deinem
Backend und kein neues Kauftoken ausgestellt, sondern das ursprüngliche Token.
um das Abo fortzusetzen. Weitere Informationen zum Verwalten der Wiederherstellung in Google
Das Abrechnungssystem von Google Play – siehe Wiederherstellungen in der Aboverwaltung
.
Sie können auch über die App eine Wiederherstellung im Abrechnungssystem von Google Play auslösen.
indem du launchBillingFlow()
anrufst. Siehe Vor Ablauf des Abonnements –
In-App. Im Fall von Nutzenden, die
für den ursprünglichen Kauf (der zwar storniert wurde, aber
noch aktiv ist), erkennt das System die Auswahl automatisch und zeigt die
Benutzeroberfläche zum Wiederherstellen
dieser Käufe. Sie werden gebeten,
das Abo noch einmal bei Google Play kaufen,
noch einmal durch den User-Choice-Ablauf. Für den Nutzer wird ein neues Kauftoken ausgestellt.
in diesem Fall. Dein Backend empfängt ein SUBSCRIPTION_PURCHASED
-Echtzeitgebot.
Entwicklerbenachrichtigung und der Wert von linkedPurchaseToken
für den neuen Kauf
wird der Status wie bei einem Upgrade oder Downgrade beim alten Kauf
Token für das gekündigte Abo.
Erneute Abos
Wenn ein Abonnement vollständig ausläuft, sei es aufgrund einer Kündigung oder Ablehnung der Zahlung ohne Wiederherstellung (eine abgelaufene Kontosperre), muss der Nutzer neu abonnieren, wenn sie die Berechtigung wieder aktivieren möchten.
Das erneute Abonnieren kann auch über die App aktiviert werden. Die Verarbeitung erfolgt auf ähnliche Weise
eine Standard-Registrierung. Nutzer sollten das gewünschte Abrechnungssystem auswählen können
zu verwenden. launchBillingFlow()
kann in diesem Fall aufgerufen werden, wie unter
Starten Sie den Abrechnungsablauf mit Auswahlmöglichkeit für Nutzer.
Alternative Abrechnung testen
Lizenztester sollten Ihre Integration für die alternative Abrechnung testen. Ich Transaktionen, die vom Lizenztester initiiert wurden, werden nicht in Rechnung gestellt. Konten. Weitere Informationen finden Sie unter In-App-Abrechnung mit App-Lizenzierung testen. Informationen zum Konfigurieren von Lizenztestern.
Nächste Schritte
Nach der In-App-Integration können Sie Ihre Back-End.