Site icon Mobilhanem

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
Exit mobile version