Este documento descreve como integrar as APIs da Biblioteca Play Faturamento para oferecer links de conteúdo externo em apps qualificados. Isso inclui a capacidade de vincular usuários nos EUA fora do seu app do Google Play para oferecer conteúdo digital no app e downloads de apps. Para saber mais sobre esse programa, consulte os requisitos do programa.
Configuração da Biblioteca Play Faturamento
Adicione a dependência da Biblioteca Play Faturamento ao seu app Android. Para usar as APIs de links externos, você precisa usar a versão 8.2 ou mais recente. Se precisar migrar de uma versão anterior, siga as instruções no guia de migração antes de adicionar os links de conteúdo externo.
Inicializar o cliente de faturamento
Para inicializar o cliente de faturamento, siga as mesmas etapas descritas em
Inicializar um BillingClient com as seguintes modificações:
- Não ative o
PurchasesUpdatedListener. Esse listener não é necessário para links de conteúdo externo. - Chame
enableBillingProgram()comBillingProgram.EXTERNAL_CONTENT_LINKpara indicar que seu app usa links de conteúdo externo.
O exemplo abaixo mostra a inicialização de um BillingClient com estas
modificações:
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();
Conectar ao Google Play
Depois de inicializar o BillingClient, conecte-se ao Google Play conforme descrito em
Conectar ao Google Play.
Verificar a qualificação do usuário
Depois de se conectar ao Google Play, verifique se o usuário está qualificado para o
programa de links para conteúdo externo chamando o método
isBillingProgramAvailableAsync(). Esse método retorna
BillingResponseCode.OK se o usuário estiver qualificado para o programa de
links de conteúdo externo. A amostra a seguir mostra como verificar a qualificação do usuário para
links de conteúdo externo:
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.
}
});
Consulte a seção Processamento de respostas para mais detalhes sobre como seu app precisa responder a outros códigos de resposta. Se você usa extensões Kotlin, pode usar corrotinas Kotlin para não precisar definir um listener separado.
Preparar um token de transação externa
Em seguida, gere um token de transação externa na Biblioteca
do Faturamento do Google Play. Um novo token de transação externa precisa ser gerado sempre que o usuário
acessa um site externo pela API External Links. Isso pode ser feito chamando a API createBillingProgramReportingDetailsAsync. O token
precisa ser gerado imediatamente antes de o usuário ser vinculado.
Observação: o token de transação externa nunca deve ser armazenado em cache. Gere um novo token sempre que o usuário for vinculado.
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.
}
});
Se você usa extensões Kotlin, pode usar corrotinas Kotlin para não precisar definir um listener separado.
Abrir o link externo
Depois que o token de transação externa estiver pronto, o usuário poderá ser vinculado fora
do app a uma oferta de conteúdo digital ou ao download de um app chamando o método
launchExternalLink. O Google Play pode renderizar caixas de diálogo de informações adicionais para o usuário, dependendo das configurações dele, quando você chama essa API.
Ao chamar o método launchExternalLink, os detalhes do link externo
precisam ser fornecidos por LaunchExternalLinkParams. Essa classe contém os seguintes parâmetros:
- URI do link: o link para o site externo em que o conteúdo digital ou o download do app é oferecido. Para downloads de apps, esse link precisa ser registrado e aprovado no Play Console.
- Tipo de link: o tipo de conteúdo oferecido ao usuário.
- Modo de inicialização: especifica como o link é aberto. Para downloads de apps, defina como
LAUNCH_IN_EXTERNAL_BROWSER_OR_APP. Programa de faturamento: defina como
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);
Processamento de respostas
Quando ocorre um erro, os métodos isBillingProgramAvailableAsync(), createBillingProgramReportingDetailsAsync() e onLaunchExternalLinkResponse() podem fornecer um BillingResponseCode diferente de BillingResponseCode.OK. Considere processar estes códigos de resposta da seguinte forma:
ERROR: este é um erro interno. Não prossiga com a transação nem abra o site externo. Tente de novo chamando a API oulaunchExternalLink()na próxima vez que tentar direcionar o usuário para fora do app.FEATURE_NOT_SUPPORTED: as APIs de link de conteúdo externo não são compatíveis com a Play Store no dispositivo atual. Não prossiga com a transação nem abra o site externo.USER_CANCELED: não abra o site externo. ChamelaunchExternalLink()novamente na próxima vez que tentar direcionar o usuário para fora do app.BILLING_UNAVAILABLE: a transação não está qualificada para links de conteúdo externo e, portanto, não pode continuar neste programa. Isso ocorre porque o usuário não está em um país qualificado para o programa ou sua conta não foi inscrita no programa. No último caso, verifique o status de registro no Google Play Console.DEVELOPER_ERROR: há um erro na solicitação. Use a mensagem de depuração para identificar e corrigir o erro antes de continuar.NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: são erros temporários que precisam ser tratados com uma política de novas tentativas adequada. No caso deSERVICE_DISCONNECTED, restabeleça uma conexão com o Google Play antes de tentar de novo.
Testar links de conteúdo externo
Os testadores de licença devem ser usados para testar a integração de promoções externas. Você não vai receber faturas pelas transações iniciadas por contas de testador de licença. Consulte Testar o faturamento em apps com o licenciamento de apps para mais informações sobre como configurar testadores de licença.
Próximas etapas
Depois de concluir a integração no app, estará tudo pronto para integrar seu back-end.