Bu belgede, uygun uygulamalarda harici içerik bağlantıları sunmak için Play Faturalandırma Kitaplığı API'lerinin nasıl entegre edileceği açıklanmaktadır. Buna, ABD'deki kullanıcıları Play uygulamanızın dışına bağlayarak uygulama içi dijital içerik ve uygulama indirme teklifleri sunma özelliği de dahildir. Bu program hakkında daha fazla bilgi edinmek için program şartlarını inceleyin.
Play Faturalandırma Kitaplığı kurulumu
Android uygulamanıza Play Faturalandırma Kitaplığı bağımlılığını ekleyin. Harici bağlantılar API'lerini kullanmak için 8.2 veya daha yeni bir sürüm kullanmanız gerekir. Daha eski bir sürümden geçiş yapmanız gerekiyorsa harici içerik bağlantılarını eklemeden önce taşıma rehberindeki talimatları uygulayın.
Fatura istemcisini başlatma
Faturalandırma istemcisini başlatmak için BillingClient başlatma bölümünde açıklanan adımları uygulayın. Ancak aşağıdaki değişiklikleri yapın:
PurchasesUpdatedListeneröğesini etkinleştirmeyin. Bu dinleyici, harici içerik bağlantıları için gerekli değildir.- Uygulamanızın harici içerik bağlantılarını kullandığını belirtmek için
enableBillingProgram()ileBillingProgram.EXTERNAL_CONTENT_LINKişlevini çağırın.
Aşağıdaki örnekte, bu değişikliklerle bir BillingClient başlatma işlemi gösterilmektedir:
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();
Google Play'e bağlanma
BillingClient cihazını başlattıktan sonra Google Play'e bağlanma başlıklı makalede açıklandığı şekilde Google Play'e bağlanın.
Kullanıcı uygunluğunu kontrol etme
Google Play'e bağlandıktan sonra isBillingProgramAvailableAsync() yöntemini çağırarak kullanıcının harici içerik bağlantıları programına uygun olup olmadığını kontrol etmeniz gerekir. Bu yöntem, kullanıcı harici içerik bağlantıları programına uygunsa BillingResponseCode.OK değerini döndürür. Aşağıdaki örnekte, harici içerik bağlantıları için kullanıcı uygunluğunun nasıl kontrol edileceği gösterilmektedir:
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.
}
});
Uygulamanızın diğer yanıt kodlarına nasıl yanıt vermesi gerektiğiyle ilgili ayrıntılar için yanıt işleme bölümüne bakın. Kotlin uzantılarını kullanıyorsanız ayrı bir dinleyici tanımlamanıza gerek kalmaması için Kotlin eşzamanlı rutinlerini kullanabilirsiniz.
Harici işlem jetonu hazırlama
Ardından, Play Billing Library'den harici bir işlem jetonu oluşturmanız gerekir. Kullanıcı, harici bağlantılar API'si aracılığıyla harici bir web sitesini her ziyaret ettiğinde yeni bir harici işlem jetonu oluşturulmalıdır. Bu işlem, createBillingProgramReportingDetailsAsync API'si çağrılarak yapılabilir. Kullanıcı bağlantısı kaldırılmadan hemen önce jeton oluşturulmalıdır.
Not: Harici işlem jetonu hiçbir zaman önbelleğe alınmamalıdır ve kullanıcı her yönlendirildiğinde yeni bir jeton oluşturmanız gerekir.
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.
}
});
Kotlin uzantılarını kullanıyorsanız ayrı bir dinleyici tanımlamanıza gerek kalmaması için Kotlin eşzamanlı rutinlerini kullanabilirsiniz.
Harici bağlantıyı başlatma
Harici işlem jetonu hazır olduktan sonra kullanıcı, launchExternalLink yöntemi çağrılarak uygulama dışında dijital içerik teklifine veya uygulama indirme işlemine yönlendirilebilir. Bu API'yi çağırdığınızda Google Play, kullanıcı ayarlarına bağlı olarak kullanıcıya ek bilgi iletişim kutuları gösterebilir.
launchExternalLink yöntemi çağrıldığında, harici bağlantının ayrıntıları LaunchExternalLinkParams aracılığıyla sağlanmalıdır. Bu sınıf aşağıdaki parametreleri içerir:
- Bağlantı URI'si: Dijital içeriğin veya uygulama indirme işleminin sunulduğu harici web sitesinin bağlantısı. Uygulama indirmeleri için bu bağlantının Play Console'da kaydedilip onaylanması gerekir.
- Bağlantı Türü: Kullanıcıya sunulan içerik türü.
- Başlatma Modu: Bağlantının nasıl başlatılacağını belirtir. Uygulama indirme işlemlerinde bu değeri
LAUNCH_IN_EXTERNAL_BROWSER_OR_APPolarak ayarlamanız gerekir. Faturalandırma Programı: Bunu
BillingProgram.EXTERNAL_CONTENT_LINKolarak ayarlayın.
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);
Yanıt işleme
Bir hata oluştuğunda isBillingProgramAvailableAsync(), createBillingProgramReportingDetailsAsync() ve onLaunchExternalLinkResponse() yöntemleri BillingResponseCode.OK dışında bir BillingResponseCode sağlayabilir. Bu yanıt kodlarını aşağıdaki şekilde ele alabilirsiniz:
ERROR: Bu bir dahili hatadır. İşleme devam etmeyin veya harici web sitesini açmayın. API'yi tekrar çağırarak veya kullanıcıyı uygulamanın dışına yönlendirmeyi bir sonraki denemenizdelaunchExternalLink()çağırarak yeniden deneyin.FEATURE_NOT_SUPPORTED: Harici içerik bağlantısı API'leri, mevcut cihazdaki Play Store tarafından desteklenmiyor. İşleme devam etmeyin veya harici web sitesini açmayın.USER_CANCELED: Harici web sitesini açma işlemine devam etmeyin. Kullanıcıyı uygulamanın dışına yönlendirmeyi bir sonraki denemenizde tekrar arayın.launchExternalLink()BILLING_UNAVAILABLE: İşlem, harici içerik bağlantıları için uygun değildir ve bu nedenle bu program kapsamında devam etmez. Bunun nedeni, kullanıcının bu programa uygun bir ülkede olmaması veya hesabınızın programa başarıyla kaydedilmemiş olmasıdır. Bu durum söz konusuysa Play Console'da kayıt durumunuzu kontrol edin.DEVELOPER_ERROR: İstekle ilgili bir hata var. Devam etmeden önce hatayı belirlemek ve düzeltmek için hata ayıklama mesajını kullanın.NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: Bunlar, uygun bir yeniden deneme politikasıyla ele alınması gereken geçici hatalardır.SERVICE_DISCONNECTEDdurumunda, yeniden denemeden önce Google Play ile bağlantıyı yeniden kurun.
Harici içerik bağlantılarını test etme
Harici teklif entegrasyonunuzu test etmek için lisans test kullanıcıları kullanılmalıdır. Lisans test edici hesapları tarafından başlatılan işlemler için faturalandırılmazsınız. Lisans test kullanıcılarını yapılandırma hakkında daha fazla bilgi için Uygulama içi faturalandırmayı uygulama lisanslama ile test etme başlıklı makaleyi inceleyin.
Sonraki adımlar
Uygulama içi entegrasyonu tamamladıktan sonra arka ucunuzu entegre etmeye hazırsınızdır.