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 bu programlar hakkında daha fazla bilgi edinmek için Alternatif Faturalandırma Hakkında bölümüne bakın.

Play Faturalandırma Kitaplığı kurulumu

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

Google Play'e bağlan

Entegrasyon sürecindeki ilk adımlar Google Play Faturalandırma entegrasyonu kılavuzunda açıklananlarla aynıdır, ancak BillingClient hesabınızı başlatırken birkaç değişiklik yapılmıştır:

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

Aşağıdaki örnek, bu değişikliklerle bir BillingClient öğesinin başlatılmasını göstermektedir:

Kotlin


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

Java

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

BillingClient uygulamasını başlattıktan sonra, entegrasyon kılavuzunda açıklandığı gibi Google Play ile bağlantı kurmanız gerekir.

Müsaitlik Durumu Kontrol Ediliyor

Uygulamanız, alternatif faturalandırmanın yalnızca isAlternativeBillingOnlyAvailableAsync numaralı telefonu arayarak kullanılabildiğini onaylamalıdır.

Yalnızca alternatif faturalandırma kullanılabiliyorsa bu API BillingResponseCode.OK 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 yapılabilmesi için uygun uygulamanızın, faturalandırmanın Google Play tarafından yönetilmeyeceğini anlamasını sağlayan bir bilgi ekranı göstermesi gerekir. Her seferinde alternatif faturalandırma akışını başlatmadan önce showAlternativeBillingOnlyInformationDialog API'yi çağırarak kullanıcılara bilgi ekranı gösterilmelidir. Kullanıcı iletişim kutusunu önceden onaylamışsa bu API'nin kullanılması genellikle iletişim kutusunun tekrar gösterilmesine neden olmaz. Kullanıcı, cihazındaki önbellekleri temizlemesi gibi durumlarda iletişim kutusunun kullanıcıya tekrar gösterildiği zamanlar olabilir.

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

Bu yöntem BillingResponseCode.OK 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 göz atın.

İşlemleri Google Play'e bildirme

Alternatif faturalandırma sistemi üzerinden yapılan tüm işlemler, aşağıda açıklanan API kullanılarak alınan bir externalTransactionToken sağlanarak 24 saat içinde arka ucunuzdan Google Play Developer API'nin çağrılması yoluyla Google Play'e bildirilmelidir. Her tek seferlik satın alma, her yeni abonelik ve mevcut bir aboneliğe 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ıtları işleme

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

  • ERROR: Bu dahili bir hatadır. İşlemi alternatif faturalandırma sistemi üzerinden gerçekleştirmeye devam edin. Etkilenen abonelikler için yenilemeler dahil olmak üzere işlemin Google'a bildirilmesine gerek yoktur.
  • FEATURE_NOT_SUPPORTED: Alternatif faturalandırma API'leri mevcut cihazda Play Store tarafından desteklenmez. İşlemi alternatif faturalandırma sistemi üzerinden işlemeye devam edin. Etkilenen abonelikler için yapılan yenilemelerin yanı sıra işlemin Google'a bildirilmesine gerek yoktur.
  • USER_CANCELED: Bir sonraki satın alma işleminde kullanıcıya bilgi iletişim kutusunun gösterilmesi için showAlternativeBillingOnlyInformationDialog() numaralı telefonu tekrar arayın.
  • BILLING_UNAVAILABLE: İşlem yalnızca alternatif faturalandırma için uygun olmadığından bu program kapsamında işleme alınmamalıdır. Bunun nedeni, kullanıcının bu program için uygun bir ülkede olmaması veya hesabınızın programa başarıyla kaydettirilememiş olmasıdır. İkinci durum geçerliyse Play Console'da kayıt durumunuzu kontrol edin.
  • DEVELOPER_ERROR: İstekle ilgili bir hata var. Devam etmeden önce hatayı tanımlayıp düzeltmek için hata ayıklama mesajını kullanın.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: Bunlar, yeniden denenmesi gereken geçici hatalardır. SERVICE_DISCONNECTED söz konusuysa yeniden denemeden önce Google Play ile yeniden bağlantı kurun.

Alternatif faturalandırmayı test etme

Lisans test kullanıcıları, alternatif faturalandırma entegrasyonunuzu test etmek için kullanılmalıdır. Lisans test kullanıcısı hesaplarıyla 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 edinmek için Uygulama içi faturalandırmayı uygulama lisanslama ile test etme bölümüne bakın.

Sonraki adımlar

Uygulama içi entegrasyonu tamamladıktan sonra, arka ucunuzu entegre etmeye hazır olursunuz.