Ce guide explique comment intégrer les API pour proposer un système de facturation alternatif uniquement (c'est-à-dire sans choix de l'utilisateur) dans les applications éligibles. Pour en savoir plus sur ces programmes, y compris sur les critères d'éligibilité et la disponibilité géographique, consultez la page À propos du système de facturation alternatif.
Configuration de la bibliothèque Play Billing
Ajoutez la dépendance de la bibliothèque Play Billing à votre application Android. Pour pouvoir utiliser les API de facturation alternative, la version 6.1 ou ultérieure est nécessaire.
Se connecter à Google Play
Les premières étapes du processus d'intégration sont les mêmes que celles décrites dans le guide d'intégration de Google Play Billing, avec quelques différences au niveau de l'initialisation du client de facturation :
- Vous devez appeler une nouvelle méthode pour indiquer que votre application utilise uniquement un système de facturation alternatif :
enableAlternativeBillingOnly
.
L'exemple suivant illustre l'initialisation d'un objet BillingClient
avec ces modifications :
Kotlin
var billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build()
Java
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build();
Après avoir initialisé BillingClient
, vous devez établir une connexion à Google Play, comme décrit dans le guide d'intégration.
Vérifier la disponibilité
Votre application doit confirmer qu'un système de facturation alternatif uniquement est disponible en appelant isAlternativeBillingOnlyAvailableAsync
.
Cette API renvoie BillingResponseCode.OK si un système de facturation alternatif uniquement est disponible. Reportez-vous à la section Gestion des réponses pour savoir comment votre application doit répondre à d'autres codes de réponse.
Kotlin
billingClient.isAlternativeBillingOnlyAvailableAsync(object:
AlternativeBillingOnlyAvailabilityListener {
override fun onAlternativeBillingOnlyAvailabilityResponse(
billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable, etc.
return
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
Java
billingClient.isAlternativeBillingOnlyAvailable(
new AlternativeBillingOnlyAvailabilityListener() {
@Override
public void onAlternativeBillingOnlyAvailabilityResponse(
BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable,
// etc.
return;
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
Boîte de dialogue d'informations pour les utilisateurs
Pour intégrer un système de facturation alternatif uniquement, votre application éligible doit afficher un écran d'informations expliquant aux utilisateurs que la facturation ne sera pas gérée par Google Play. L'écran d'informations doit systématiquement être présenté aux utilisateurs en appelant l'API showAlternativeBillingOnlyInformationDialog
avant de lancer le parcours de facturation alternatif. Si l'utilisateur a déjà confirmé la boîte de dialogue, cette dernière ne sera normalement pas générée à nouveau lors de l'utilisation de l'API. Dans certains cas, la boîte de dialogue peut s'afficher à nouveau, par exemple si l'utilisateur vide des caches sur son appareil.
Kotlin
// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;
val listener : AlternativeBillingOnlyInformationDialogListener =
AlternativeBillingOnlyInformationDialogListener {
override fun onAlternativeBillingOnlyInformationDialogResponse(
billingResult: BillingResult) {
// check billingResult
}
}
val billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener)
Java
// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;
AlternativeBillingOnlyInformationDialogListener listener =
new AlternativeBillingOnlyInformationDialogListener() {
@Override
public void onAlternativeBillingOnlyInformationDialogResponse(
BillingResult billingResult) {
// check billingResult
}
};
BillingResult billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener);
Si cette méthode renvoie BillingResponseCode.OK, alors votre application peut poursuivre la transaction. Si la méthode renvoie BillingResponseCode.USER_CANCELED, votre application doit appeler showAlternativeBillingOnlyInformationDialog pour afficher à nouveau la boîte de dialogue à l'utilisateur. Pour les autres codes de réponse, consultez la section Gestion des réponses.
Signaler des transactions à Google Play
Toutes les transactions effectuées via un système de facturation alternatif doivent être signalées à Google Play en appelant l'API Google Play Developer depuis votre backend dans les 24 heures, en fournissant un externalTransactionToken
obtenu à l'aide de l'API décrite ci-dessous. Un nouveau jeton externalTransactionToken doit être généré pour chaque achat unique, chaque nouvel abonnement, et pour toute mise à niveau ou rétrogradation d'un abonnement existant. Pour savoir comment enregistrer une transaction une fois qu'un externalTransactionToken
est obtenu, consultez le guide d'intégration du backend.
Kotlin
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
AlternativeBillingOnlyReportingDetailsListener {
override fun onAlternativeBillingOnlyTokenResponse(
billingResult: BillingResult,
alternativeBillingOnlyReportingDetails:
AlternativeBillingOnlyReportingDetails?) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
val externalTransactionToken =
alternativeBillingOnlyReportingDetails?
.externalTransactionToken
// Send transaction token to backend and report to Google Play.
}
});
Java
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
new AlternativeBillingOnlyReportingDetailsListener() {
@Override
public void onAlternativeBillingOnlyTokenResponse(
BillingResult billingResult,
@Nullable AlternativeBillingOnlyReportingDetails
alternativeBillingOnlyReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
alternativeBillingOnlyReportingDetails
.getExternalTransactionToken();
// Send transaction token to backend and report to Google Play.
}
});
Gestion des réponses
Les méthodes isAlternativeBillingOnlyAvailableAsync(),
showAlternativeBillingOnlyInformationDialog()
et createAlternativeBillingOnlyReportingDetailsAsync()
ci-dessus peuvent renvoyer des réponses non-BillingResponseCode.OK en cas d'erreurs. La gestion recommandée pour les erreurs est décrite ci-dessous :
ERROR
: il s'agit d'une erreur interne. Ne poursuivez pas la transaction. Réessayez en appelantshowAlternativeBillingOnlyInformationDialog()
pour afficher les informations à l'utilisateur la prochaine fois qu'il tente d'effectuer un achat.FEATURE_NOT_SUPPORTED
: les API de système de facturation alternatif ne sont pas compatibles avec le Play Store sur l'appareil actuel. Procédez au traitement de la transaction via le système de facturation alternatif. Il n'est pas nécessaire de signaler la transaction à Google ni de signaler les renouvellements des abonnements concernés.USER_CANCELED
: ne procédez pas à la transaction. AppelershowAlternativeBillingOnlyInformationDialog()
pour afficher d'informations à l'utilisateur la prochaine fois qu'il tentera de à l'achat.BILLING_UNAVAILABLE
: la transaction n'est pas éligible à un système de facturation alternatif uniquement et ne doit donc pas être traitée par ce programme. Cela est peut-être dû au fait que l'utilisateur ne se trouve pas dans l'un des pays éligibles à ce programme ou que l'inscription de votre compte au programme n'a pas été couronnée de succès. Dans ce dernier cas, vérifiez le statut de votre inscription dans la Play Console.DEVELOPER_ERROR
: une erreur s'est produite au niveau de la requête. Utilisez le message de débogage pour identifier et corriger l'erreur avant de continuer.NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE
: erreurs temporaires nécessitant une nouvelle tentative. Dans le cas deSERVICE_DISCONNECTED
, rétablissez une connexion avec Google Play avant de réessayer.
Tester un système de facturation alternatif
Les testeurs de licence doivent être utilisés pour tester l'intégration de votre système de facturation alternatif. Toi ne seront pas facturées pour les transactions initiées par les testeurs de licence Google Cloud. Pour en savoir plus, consultez Tester la facturation des achats in-app avec les licences d'application. des informations sur la configuration des testeurs de licence.
Étapes suivantes
Une fois que vous avez terminé l'intégration dans l'application, vous pouvez intégrer le backend.