Yalnızca alternatif faturalandırma için uygulama içi entegrasyon kılavuzu

Bu kılavuzda, uygun uygulamalarda yalnızca alternatif faturalandırma (kullanıcıya tercih seçeneği sunulmayan) sunmak için API'lerin nasıl entegre edileceği açıklanmaktadır. Uygunluk koşulları ve coğrafi kapsam dahil olmak üzere bu programlar hakkında daha fazla bilgi edinmek için Alternatif Faturalandırma Hakkında başlıklı makaleyi inceleyin.

Play Faturalandırma Kitaplığı kurulumu

Android uygulamanıza Play Faturalandırma Kitaplığı bağımlılığını ekleyin. Alternatif faturalandırma API'lerini kullanmak için 6.1 veya sonraki bir sürümü kullanmanız gerekir.

Google Play'e bağlanma

Entegrasyon sürecindeki ilk adımlar, Google Play Faturalandırma entegrasyon kılavuzunda açıklanan adımlarla aynıdır. Ancak BillingClient'ınızı başlatırken birkaç değişiklik yapmanız gerekir:

  • Uygulamanızın yalnızca alternatif faturalandırma sistemi kullandığını belirtmek için yeni bir yöntem çağırmanız gerekir: enableAlternativeBillingOnly.

Aşağıdaki örnekte, bu değişikliklerle bir BillingClient başlatma işlemi gösterilmektedir:

Kotlin

var billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build()

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build();

BillingClient başlatıldıktan sonra, entegrasyon kılavuzunda açıklandığı şekilde Google Play ile bağlantı oluşturmanız gerekir.

Kullanılabilirlik kontrol ediliyor

Uygulamanız, isAlternativeBillingOnlyAvailableAsync işlevini çağırarak yalnızca alternatif faturalandırmanın kullanılabildiğini onaylamalıdır.

Bu API, yalnızca alternatif faturalandırma kullanılabiliyorsa BillingResponseCode.OK değerini döndürür. 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

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.
        }
    });

Kullanıcılar için bilgi iletişim kutusu

Yalnızca alternatif faturalandırma ile entegrasyon için uygun uygulamanız, faturalandırmanın Google Play tarafından yönetilmeyeceğini kullanıcılara bildiren bir bilgi ekranı göstermelidir. Bilgi ekranı, her seferinde alternatif faturalandırma akışı başlatılmadan önce showAlternativeBillingOnlyInformationDialog API'si çağrılarak kullanıcılara gösterilmelidir. Kullanıcı iletişim kutusunu zaten onaylamışsa bu API'nin kullanılması genellikle iletişim kutusunun tekrar gösterilmesine neden olmaz. Kullanıcının cihazındaki önbellekleri temizlemesi gibi durumlarda iletişim kutusu kullanıcıya tekrar gösterilebilir.

Kotlin

// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity: Activity = this.activity

val listener: AlternativeBillingOnlyInformationDialogListener =
    AlternativeBillingOnlyInformationDialogListener { 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);

Bu yöntem BillingResponseCode.OK değerini döndürürse uygulamanız işleme devam edebilir. BillingResponseCode.USER_CANCELED durumunda uygulamanız, iletişim kutusunu kullanıcıya tekrar göstermek için showAlternativeBillingOnlyInformationDialog'u çağırmalıdır. Diğer yanıt kodları için yanıt işleme bölümüne bakın.

İşlemleri Google Play'e bildirme

Alternatif faturalandırma sistemi üzerinden yapılan tüm işlemler, 24 saat içinde arka uçtan Google Play Developer API'si çağrılarak Google Play'e bildirilmelidir. Bu bildirimde, aşağıda açıklanan API kullanılarak elde edilen bir externalTransactionToken sağlanmalıdır. Her tek seferlik satın alma işlemi, her yeni abonelik ve mevcut abonelikteki yükseltme/düşürme işlemleri için yeni bir externalTransactionToken oluşturulmalıdır. externalTransactionToken alındıktan sonra bir işlemi nasıl bildireceğinizi öğrenmek için arka uç entegrasyon kılavuzuna bakın.

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.
        }
    });

Yanıt işleme

Yukarıdaki yöntemler isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() ve createAlternativeBillingOnlyReportingDetailsAsync(), hatalar durumunda BillingResponseCode.OK olmayan yanıtlar döndürebilir. Hataların önerilen işlenme şekli aşağıda açıklanmıştır:

  • ERROR: Bu bir dahili hatadır. İşleme devam etmeyin. Kullanıcı bir sonraki satın alma girişiminde bulunduğunda bilgi iletişim kutusunu göstermek için showAlternativeBillingOnlyInformationDialog() işlevini çağırarak tekrar deneyin.
  • FEATURE_NOT_SUPPORTED: Alternatif faturalandırma API'leri, mevcut cihazdaki Play Store tarafından desteklenmiyor. İşleme devam etmeyin.
  • USER_CANCELED: İşleme devam etmeyin. Kullanıcı bir sonraki satın alma işleminde bilgi iletişim kutusunu göstermek için Call showAlternativeBillingOnlyInformationDialog() işlevini tekrar kullanın.
  • BILLING_UNAVAILABLE: İşlem yalnızca alternatif faturalandırma için uygun değildir ve bu nedenle bu program kapsamında devam etmemelidir. 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, geçici hatalardır ve yeniden denenmelidir. SERVICE_DISCONNECTED durumunda, yeniden denemeden önce Google Play ile bağlantı kurun.

Alternatif faturalandırmayı test etme

Alternatif faturalandırma 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 uçunuzu entegre etmeye hazırsınız.