İçeriğe geç
Tüm yazılar

Android In-App Review API: sıkıcı olmadan puan istemek

Google'ın In-App Review API'sine pratik bir rehber — gerçekte nasıl çalıştığı, ne zaman tetiklenmesi gerektiği ve alışılmış 'bizi puanlayın' popup'ının Play Store puanınızı sessizce nasıl zedelediği.

MFKAPPS 4 dk okuma

Android’deki çoğu “bizi puanlayın” istemi, iki butonlu özel bir dialog’dur: biri Play Store listesini açar, diğeri kapatır. Uygulama açılışında ya da rastgele bir oturum sayısından sonra belirir ve kullanıcının o an gerçekten yapmaya çalıştığı şeyi keser. “Puanla”ya dokunan kişi uygulamanızdan çıkar, Play Store’a düşer ve şimdi bir yorumu sıfırdan yazmak zorundadır — az önce yakaladığınız niyetin çoğunu öldüren bir sürtünme. “Şimdi değil”e dokunan kişi size hiçbir şey söylememiştir ve muhtemelen gelecek hafta yine soracaksınızdır.

Google’ın In-App Review API’si bu sorunun mekanik yarısını çözer: uygulamanızın üzerinde beliren, kullanıcının uygulamadan çıkmadan yıldız seçmesine (ve isteğe bağlı olarak birkaç kelime yazmasına) izin veren ve onu tam olarak bulunduğu yere geri döndüren native bir puanlama sayfası. UX yarısını çözmez — ne zaman tetiklediğiniz hâlâ nasıl tetiklediğinizden daha önemlidir — ama “nasıl” kısmını yanlış yapma bahanesini ortadan kaldırır.

Gerçekte nasıl çalışır

API, Play Core’un (com.google.android.play:review-ktx) bir parçasıdır. Önceden bir ReviewInfo nesnesi istersiniz, sonra hazır olduğunuzda akışı başlatırsınız:

val manager = ReviewManagerFactory.create(context)

manager.requestReviewFlow().addOnCompleteListener { request ->
    if (request.isSuccessful) {
        val reviewInfo = request.result
        manager.launchReviewFlow(activity, reviewInfo)
            .addOnCompleteListener {
                // The flow is finished — you don't get a signal on
                // whether the user actually rated. Treat this as "done,"
                // not "succeeded."
            }
    }
}

İki detay insanları yakalıyor. Birincisi, requestReviewFlow() sessizce başarısız olabilir ya da hiç dialog göstermeden dönebilir — Google, aynı kullanıcının bu sayfayı ne sıklıkla gördüğünü sınırlar (uygulama başına yaklaşık yılda bir kez, tam olarak dokümante edilmemiş ve sizin kontrolünüzde değil), bu yüzden test sırasındaki çoğu çağrı hiçbir şey göstermeden tamamlanır. İkincisi, tamamlanma geri çağrısı kullanıcı puan versin, atlasın ya da kota dialog’u tamamen engellesin, her durumda tetiklenir. Bir onRatingSubmitted yoktur — bilinçli olarak, böylece uygulamalar sonuca göre özellik kilitleyemez ya da ısrar edemez.

Asıl önemli olan kısım: zamanlama

API’nin sürtünmesiz olması, kötü bir anda tetiklerseniz işe yaramaz. En sık gördüğüm hata modu, onCreate()’ten hemen sonra requestReviewFlow()’u çağırmak — daha fazla gösterimin daha fazla yorum demek olduğu varsayımıyla. Tam tersi oluyor — kullanıcının henüz bir fikri olmadan soruyorsunuz ve bunu, o gün uygulamaya girmesine neden olan işin ortasındayken yapıyorsunuz.

İşe yarayan an, uygulamanın işini yapmayı kanıtlanabilir şekilde bitirdiği andır. Mintly’yi yaparken bu, bir odaklanma seansı bittiğinde ve kullanıcı serisinin arttığını gördüğü an — ilk seans değil, uygulamanın zaten biraz güven kazandığı bir seans. Uygulama kategorileri arasında geçerli olan birkaç somut kural:

  • Sabit bir oturum sayısında değil, tamamlanmış olumlu bir sonuçta tetikleyin. Bir bütçe uygulamasında kullanıcı bir ayı temiz şekilde kapattıktan sonra, bir alışkanlık takipçisinde bir seri dönüm noktasından sonra, bir hatırlatıcı uygulamasında gerçekten işe yarayan bir kurtarmadan sonra — “5. oturum” değil.
  • Asla bir hata yolunda tetiklemeyin. Bir şey az önce başarısız olduysa ya da kullanıcı bir akıştan geri çıktıysa, sormak için en kötü andır.
  • API sizi sınırlasa bile kendinizi sınırlayın. Google’ın kotası çoğu isteğin sessizce hiçbir şey yapmamasına neden olur, ama kendi tetikleme mantığınız yine de her uygun olayda ateşlemekten kaçınmalıdır — akış bir kullanıcı için tamamlandıktan sonra, kendi takibiniz gösterilip gösterilmediğini doğrulayamasa bile aylarca tekrar çağırmayın.
  • Asla kendi ön-istemi ile birleştirmeyin. Gerçek istemi kapatan özel bir “keyif alıyor musunuz?” dialog’u, API’nin ortadan kaldırmak için var olduğu iki dokunuşluk sürtünmeyi yeniden getirir ve gerçek istemi kimin gördüğünü filtrelemenize izin verir — ki bu tam olarak Play’in inceleme kurallarının yasakladığı oyundur.

Yapamadığı şey ve insanların yine de denediği şey

Kullanıcının gerçekten puan bırakıp bırakmadığını, yıldız değerini okuyamaz ya da mutsuz kullanıcıları akıştan uzaklaştırıp mutlu olanları akışa yönlendiremezsiniz. Bu sonuncusu yaygın bir istektir ve Play’in geliştirici politikasına açıkça aykırıdır — API’nin bütün amacı, onu tetikleyen herkesin aynı, filtrelenmemiş sayfayı görmesidir. “Zor bir zaman mı geçiriyorsunuz?” tarzı bir destek kanalı istiyorsanız, bunu inceleme isteminin önüne bir çatal olarak değil, ayrı ve dürüst bir geri bildirim bağlantısı olarak kurun.

Bilinmesi gereken diğer sınırlama: yalnızca Play içindir. Diğer Android uygulama mağazalarında eşdeğer bir garanti yoktur ve onlarda yine elle “bizi puanlayın” bağlantısına ya da mağazanın kendi mekanizmasına geri dönersiniz.

Kotanızı tüketmeden test etmek

Gerçek kota opak olduğu için, üretim derlemeniz yerine Play Core test araçları üzerinden test edin — com.google.android.play:review-ktx test artifact’ı ve dahili uygulama paylaşım kanalları, Google’ın gerçek dünya sınırlamasını beklemeden akışı tekrar tekrar tetiklemenize izin verir. Geliştirme sırasında tetikleyiciyi bir debug menüsüne bağlayın, böylece talep üzerine ateşleyebilirsiniz, sonra yayından önce bu kısayolu kaldırın. Üretimde, her çağrıyı ateşle-ve-unut olarak ele alın: iste, başlat, devam et ve sayfayı kimin gerçekten göreceğine Google’ın kendi mantığının karar vermesine izin verin.