Ce document explique comment intégrer les API de la bibliothèque Play Billing pour proposer des liens vers du contenu externe dans les applications éligibles. Cela inclut la possibilité de rediriger les utilisateurs aux États-Unis en dehors de votre application Play pour leur proposer des offres de contenu numérique intégré et de téléchargements d'applications. Pour en savoir plus sur ce programme, consultez les exigences du programme.
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 liens externes, la version 8.2 ou ultérieure est nécessaire. Si vous devez effectuer la migration à partir d'une version antérieure, suivez les instructions du guide de migration avant d'ajouter les liens vers le contenu externe.
Initialiser le client de facturation
Pour initialiser le client de facturation, suivez les mêmes étapes que celles décrites dans Initialiser un BillingClient, avec les modifications suivantes :
- N'activez pas
PurchasesUpdatedListener, car cet écouteur n'est pas nécessaire pour les liens vers des contenus externes. - Appelez
enableBillingProgram()avecBillingProgram.EXTERNAL_CONTENT_LINKpour indiquer que votre application utilise des liens vers des contenus externes.
L'exemple suivant illustre l'initialisation d'un BillingClient avec ces modifications :
Kotlin
val billingClient = BillingClient.newBuilder(context)
.enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build()
Java
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build();
Se connecter à Google Play
Après avoir initialisé BillingClient, connectez-vous à Google Play comme décrit dans Se connecter à Google Play.
Vérifier l'éligibilité des utilisateurs
Une fois que vous vous êtes connecté à Google Play, vous devez vérifier si l'utilisateur est éligible au programme de liens vers des contenus externes en appelant la méthode isBillingProgramAvailableAsync(). Cette méthode renvoie BillingResponseCode.OK si l'utilisateur est éligible au programme de liens vers des contenus externes. L'exemple suivant montre comment vérifier l'éligibilité de l'utilisateur aux liens vers des contenus externes :
Kotlin
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_CONTENT_LINK,
object : BillingProgramAvailabilityListener {
override fun onBillingProgramAvailabilityResponse(
billingProgram: Int, billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling external content links unavailable, etc.
return
}
// External content links are available. Prepare an external
// transaction token.
}
})
Java
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_CONTENT_LINK,
new BillingProgramAvailabilityListener() {
@Override
public void onBillingProgramAvailabilityResponse(
int billingProgram, BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling external content links unavailable, etc.
return;
}
// External content links are available. Prepare an external
// transaction token.
}
});
Consultez la section Gestion des réponses pour savoir comment votre application doit répondre à d'autres codes de réponse. Si vous utilisez des extensions Kotlin, vous pouvez utiliser des coroutines Kotlin. Vous n'avez donc pas besoin de définir un écouteur distinct.
Préparer un jeton de transaction externe
Vous devez ensuite générer un jeton de transaction externe à partir de la bibliothèque Play Billing. Un nouveau jeton de transaction externe doit être généré chaque fois que l'utilisateur accède à un site Web externe via l'API External Links. Pour ce faire, appelez l'API createBillingProgramReportingDetailsAsync. Le jeton doit être généré immédiatement avant la redirection de l'utilisateur.
Remarque : Le jeton de transaction externe ne doit jamais être mis en cache. Vous devez générer un nouveau jeton chaque fois que l'utilisateur est redirigé.
Kotlin
val params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build();
billingClient.createBillingProgramReportingDetailsAsync(
params,
object : BillingProgramReportingDetailsListener {
override fun onCreateBillingProgramReportingDetailsResponse(
billingResult: BillingResult,
billingProgramReportingDetails: BillingProgramReportingDetails?) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
val externalTransactionToken =
billingProgramReportingDetails?.externalTransactionToken
// Persist the external transaction token locally. Pass it to the
// external website when launchExternalLink is called.
}
})
Java
BillingProgramReportingDetailsParams params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.build();
billingClient.createBillingProgramReportingDetailsAsync(
params,
new BillingProgramReportingDetailsListener() {
@Override
public void onCreateBillingProgramReportingDetailsResponse(
BillingResult billingResult,
@Nullable BillingProgramReportingDetails
billingProgramReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
billingProgramReportingDetails.getExternalTransactionToken();
// Persist the external transaction token locally. Pass it to the
// external website when launchExternalLink is called.
}
});
Si vous utilisez des extensions Kotlin, vous pouvez utiliser des coroutines Kotlin. Vous n'avez donc pas besoin de définir un écouteur distinct.
Lancer le lien externe
Une fois le jeton de transaction externe prêt, l'utilisateur peut être redirigé en dehors de l'application vers une offre de contenu numérique ou un téléchargement d'application en appelant la méthode launchExternalLink. Google Play peut afficher des boîtes de dialogue d'informations supplémentaires à l'utilisateur en fonction de ses paramètres utilisateur lorsque vous appelez cette API.
Lorsque vous appelez la méthode launchExternalLink, vous devez fournir les détails du lien externe via LaunchExternalLinkParams. Cette classe contient les paramètres suivants :
- URI du lien : lien vers le site Web externe où le contenu numérique ou le téléchargement de l'application sont proposés. Pour les téléchargements d'applications, ce lien doit être enregistré et approuvé dans la Play Console.
- Type de lien : type de contenu proposé à l'utilisateur.
- Mode de lancement : spécifie comment le lien est lancé. Pour les téléchargements d'applications, vous devez définir cette valeur sur
LAUNCH_IN_EXTERNAL_BROWSER_OR_APP. Programme de facturation : définissez cette valeur sur
BillingProgram.EXTERNAL_CONTENT_LINK.
Kotlin
val params =
LaunchExternalLinkParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
.setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
.setLaunchMode(
LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build()
val listener : LaunchExternalLinkResponseListener =
object : LaunchExternalLinkResponseListener {
override fun onLaunchExternalLinkResponse(
billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
// If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
// user was directed outside of the app by Play. This does not give
// any information on the user's actions during the link out, such
// as if a transaction was completed.
// If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
// may proceed to direct the user to the external website.
}
}
billingClient.launchExternalLink(activity, params, listener)
Java
LaunchExternalLinkParams params =
LaunchExternalLinkParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
.setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
.setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
.setLaunchMode(
LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build()
LaunchExternalLinkResponseListener listener =
new LaunchExternalLinkResponseListener() {
@Override
public void onLaunchExternalLinkResponse(BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
// If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
// user was directed outside of the app by Play. This does not give
// any information on the user's actions during the link out, such
// as if a transaction was completed.
// If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
// may proceed to direct the user to the external website.
}
}
billingClient.launchExternalLink(activity, params, listener);
Gestion des réponses
En cas d'erreur, les méthodes isBillingProgramAvailableAsync(), createBillingProgramReportingDetailsAsync() et onLaunchExternalLinkResponse() peuvent fournir un BillingResponseCode autre que BillingResponseCode.OK. Voici comment gérer ces codes de réponse :
ERROR: il s'agit d'une erreur interne. Ne poursuivez pas la transaction ni l'ouverture du site Web externe. Réessayez en appelant à nouveau l'API ou en appelantlaunchExternalLink()la prochaine fois que vous tenterez de rediriger l'utilisateur en dehors de l'application.FEATURE_NOT_SUPPORTED: les API de liens vers des contenus externes ne sont pas compatibles avec le Play Store sur l'appareil actuel. Ne poursuivez pas la transaction ni l'ouverture du site Web externe.USER_CANCELED: n'ouvre pas le site Web externe. AppelezlaunchExternalLink()à nouveau la prochaine fois que vous tenterez de rediriger l'utilisateur en dehors de l'application.BILLING_UNAVAILABLE: la transaction n'est pas éligible aux liens vers des contenus externes 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 règle de nouvelle tentative appropriée. Dans le cas deSERVICE_DISCONNECTED, rétablissez une connexion avec Google Play avant de réessayer.
Tester les liens vers des contenus externes
Les testeurs de licence doivent être utilisés pour tester l'intégration de vos offres externes. Les transactions initiées par des comptes de testeurs de licence ne vous seront pas facturées. Pour en savoir plus sur la configuration des testeurs de licence, consultez Tester la facturation des achats in-app avec les licences d'application.
Étapes suivantes
Une fois que vous avez terminé l'intégration dans l'application, vous pouvez intégrer le backend.