Android Google Play Uygulama Puanlama

Merhaba arkadaşlar,
Mobilhanem.com üzerinden anlattığımız/yayınladığımız Android Uygulama Geliştirme derslerimize bu dersimizde sizlere android uygulamalarımızı store a koyduktan sonra kullanıcılardan nasıl puan isteyeceğimizi anlatacağım. Bir çok uygulamada yer alan Android Google Play Uygulama Puanlama işlemini hazırlamak gerçekten çok kolay.

Uygulama her çalıştığında belirli kontrolleri yapıyoruz. Aşağıdaki kodu incelediğinizde göreceğiniz gibi; uygulama ilk kez çalıştığında bugünün tarihi alıp sharedpreferences ile kaydediyoruz. SharedPreferences detaylı kullanım için bu dersimizi inceleyebilirsiniz. (https://www.mobilhanem.com/android-sharedpreferences-kullanimi/)

Daha sonra AppRating sınıfının app_launched fonksiyonunu çağırıyoruz.

MainActivity.java

package com.mobilhanem.rateandroidapp;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    final String PREFS_NAME = "MyPrefsFile";
    final String SHAREDPREF_DATE = "SharedPrefDate";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        SharedPreferences dateShared = getSharedPreferences(SHAREDPREF_DATE, 0);
        SharedPreferences.Editor dateEditor  = dateShared.edit();
        SimpleDateFormat dfDate  = new SimpleDateFormat("dd/MM/yyyy");

        if (settings.getBoolean("my_first_time", true)) {
            Log.d("Comments", "First time");
            Calendar cal = Calendar.getInstance();
            dateEditor.putString("dateVal",dfDate.format(cal.getTime()));
            dateEditor.commit();
            settings.edit().putBoolean("my_first_time", false).commit();
        }

        AppRating.app_launched(this);

    }
}

AppRating sınıfımızı incelemeye başlarsak; runCount değişkenini her defasında bir artırıyoruz , daha sonra uygulama ilk kez çalıştığında kaydettiğimiz tarih ile o anki tarihi alıp aradaki farkı buluyoruz. Eğer aradaki fark iki den büyük ve eşitse , ayrıca runCount değişkenin mod değeri iki ile tam bölünüyorsa kullanıcının karşısına puan verme dialogunu çıkarıyoruz. Böylece her defasında kullanıcıya puan verme ekranını çıkarıp rahatsız etmiyoruz. MaterialStyledDialog third paty kütüphanesini kullanarak toplamda üç seçeneği olan alert dialog oluşturuyoruz. ( positive, neutral, negative ) Puan ver dediğimizde store daki uygulamamızın paket adını kullanarak store direk olarak yönlendirme yapıyoruz. Eğer kullanıcı Hayır, Teşekkürler seçeneğini seçerse SharedPreferences kullanarak boolean değeri false olarak kaydediyoruz. Böylece kullanıcı uygulamayı telefondan silip tekrar yüklemediği sürece puanlama ekranı bir daha karşısına çıkmıyor.

AppRating.java

package com.mobilhanem.rateandroidapp;

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.support.annotation.NonNull;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.github.javiersantos.materialstyleddialogs.MaterialStyledDialog;

import java.text.SimpleDateFormat;
import java.util.Calendar;


/**
 * Created by alper on 15/12/16.
 */

public class AppRating {

    private final static String APP_PNAME = "com.uniapps.unitiraf";// Paket Adi

    public static void app_launched(Context mContext) {
        SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
        if (prefs.getBoolean("dontshowagain", false)) { return ; }

        SharedPreferences.Editor editor = prefs.edit();

        long launch_count = prefs.getLong("launch_count", 0) + 1;
        editor.putLong("launch_count", launch_count);

        int runCount = prefs.getInt("count",0) + 1;
        editor.putInt("count",runCount);

        SharedPreferences datePrefs = mContext.getSharedPreferences("SharedPrefDate", 0);
        SimpleDateFormat dfDate  = new SimpleDateFormat("dd/MM/yyyy");

        Calendar cal = Calendar.getInstance();
        java.util.Date newDateVal = null;
        java.util.Date oldDateVal = null;
        try {
            newDateVal = dfDate.parse(dfDate.format(cal.getTime()));
            oldDateVal = dfDate.parse(datePrefs.getString("dateVal",""));
        } catch (java.text.ParseException e) {
            e.printStackTrace();
        }


        int diffInDays = (int) ((newDateVal.getTime() -  oldDateVal.getTime())/ (1000 * 60 * 60 * 24));
        System.out.println("date"+diffInDays);

        if(diffInDays>=2){

            if(runCount%2==0){
                SharedPreferences dateShared = mContext.getSharedPreferences("SharedPrefDate", 0);
                SharedPreferences.Editor dateEditor  = dateShared.edit();
                Calendar today = Calendar.getInstance();
                dateEditor.putString("dateVal",dfDate.format(today.getTime()));
                dateEditor.commit();
                showRateDialog(mContext, editor);
            }

        }

        editor.commit();

    }

    public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) {


        new MaterialStyledDialog.Builder(mContext)
                .setTitle("Puan Ver!")
                .setDescription("Eğer uygulamayı beğendiyseniz lütfen puan verin!")
                .setCancelable(false)
                .setNegativeText("Hayır, Teşekkürler")
                .onNegative(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                        if (editor != null) {
                            editor.putBoolean("dontshowagain", true);
                            editor.commit();
                        }
                    }
                })
                .setNeutralText("Daha Sonra")
                .onNeutral(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                        SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
                        SharedPreferences.Editor editor = prefs.edit();
                        editor.putInt("count",0);
                        editor.commit();

                    }
                })
                .setIcon(R.drawable.mobilhanem_logo)
                .withIconAnimation(true)
                .setPositiveText("Puan Ver")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                        Uri uri = Uri.parse("market://details?id=" + APP_PNAME);
                        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                        goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                                Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                                Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
                        try {
                            mContext.startActivity(goToMarket);
                        } catch (ActivityNotFoundException e) {
                            mContext.startActivity(new Intent(Intent.ACTION_VIEW,
                                    Uri.parse("http://play.google.com/store/apps/details?id=" + APP_PNAME)));
                        }
                    }
                })
                .show();

    }
}

Android uygulamalarımız için önemli bir unsur olan puanlamanın nasıl yapıldığını sizlere anlatmaya çalıştım. Bunun için bir çok hazır kütüphane internette mevcut isterseniz onlarıda kullanabilirsiniz bir kaç örnek:

https://github.com/hotchemi/Android-Rate

https://github.com/kobakei/Android-RateThisApp

https://github.com/erishforG/Android-Rate-Dialog

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

 

1

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

7 Yorum

  • Öncelikle teşekkürler. Fakat ben bu Dialog başında mavi rengi değiştirmek istiyorum ve ya resmi tam dikdörtgene sığacak şekilde koymak istiyorum. Bunu nasıl yapabilirim?

  • Merhabalar emeğinize sağlık öncelikle kaynak kodları kullanıp kendi projeme dahil ettim fakat hiçbir tepki alamayınca direkt sizin projenizi indirip build apk yaptığımda cihazıma yüklediğim bu apk ile malesef programı açtığımda boş beyaz bir ekranda kalıyor ve oylama için bildirim gelmiyor. (Deneme yaptığım cihazımın yazılımı Android 7.0 )
    Acaba kodlarda mı ufak bir eksiklik var ya da benim gözden kaçırdığım bir durum mu var yardımcı olabilirseniz sevinirim 🙂

    • Merhaba öncelikle teşekkür ederiz konuyu ilettiğiniz için gözden geçirip bir sıkıntı varsa buradan size geri dönüş yapalım.

    • Merhaba kaynak kodu incelerseniz eğer diffInDays>=1 koşulunu göreceksiniz oradaki koşulu kendinize göre uyarlarsanız (dediğim kısımdaki if koşulunu commente alıp direk showRateDialog methodunu çağırırsanız göreceksiniz ) istediğiniz zaman app rate dialogu gösterebilirsiniz. run ettiğinizde direk ekrana gelmemesinin nedeni bu yani kaynak kodda bir sıkıntı yok 🙂

      • Zahmet verdim çok teşekkür ederim dediğiniz gibi show rate dialog metodunu direkt çağırınca sorun ortadan kalktı 🙂

  • hocam bilgi için tşkler öncelikle, bunu android webvievde uygulayabilirmiyiz? yapabiliyorsakda nasıl yapabiliriz bilgi verrmisin?

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?