Cómo implementar Rate It en la aplicación para Android

Estoy desarrollando una aplicación para Android. En el que todo funciona bien. Mi aplicación está lista para iniciarse. Pero allí tengo que implementar una característica más. Necesito mostrar una ventana emergente que contenga

Rate It y Remind me later

Aquí, si cualquier usuario tasa de la aplicación en el mercado, entonces el popup no será desaparecido. He buscado en Google y he encontrado un enlace . Con esto comprendo que no es posible saberlo. Así que necesito una sugerencia para esto.

¿Alguien ha enfrentado esta situación antes? Si es así, ¿hay alguna solución o alguna alternativa para esto?

He implementado esto un tiempo atrás, en cierta medida. Es imposible saber si un usuario ha calificado una aplicación, para evitar que las calificaciones se conviertan en una moneda (algunos desarrolladores podrían agregar una opción como "Califique esta aplicación y obtenga algo así en la aplicación de forma gratuita").

La clase que escribí proporciona tres botones y configura el diálogo para que solo se muestre después de que la aplicación se haya iniciado n veces (los usuarios tienen una mayor probabilidad de calificar la aplicación si la han utilizado un poco antes. Poco probable que sepa lo que hace en la primera ejecución):

 public class AppRater { private final static String APP_TITLE = "App Name";// App Name private final static String APP_PNAME = "com.example.name";// Package Name private final static int DAYS_UNTIL_PROMPT = 3;//Min number of days private final static int LAUNCHES_UNTIL_PROMPT = 3;//Min number of launches public static void app_launched(Context mContext) { SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0); if (prefs.getBoolean("dontshowagain", false)) { return ; } SharedPreferences.Editor editor = prefs.edit(); // Increment launch counter long launch_count = prefs.getLong("launch_count", 0) + 1; editor.putLong("launch_count", launch_count); // Get date of first launch Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0); if (date_firstLaunch == 0) { date_firstLaunch = System.currentTimeMillis(); editor.putLong("date_firstlaunch", date_firstLaunch); } // Wait at least n days before opening if (launch_count >= LAUNCHES_UNTIL_PROMPT) { if (System.currentTimeMillis() >= date_firstLaunch + (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) { showRateDialog(mContext, editor); } } editor.commit(); } public static void showRateDialog(final Context mContext, final SharedPreferences.Editor editor) { final Dialog dialog = new Dialog(mContext); dialog.setTitle("Rate " + APP_TITLE); LinearLayout ll = new LinearLayout(mContext); ll.setOrientation(LinearLayout.VERTICAL); TextView tv = new TextView(mContext); tv.setText("If you enjoy using " + APP_TITLE + ", please take a moment to rate it. Thanks for your support!"); tv.setWidth(240); tv.setPadding(4, 0, 4, 10); ll.addView(tv); Button b1 = new Button(mContext); b1.setText("Rate " + APP_TITLE); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME))); dialog.dismiss(); } }); ll.addView(b1); Button b2 = new Button(mContext); b2.setText("Remind me later"); b2.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } }); ll.addView(b2); Button b3 = new Button(mContext); b3.setText("No, thanks"); b3.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (editor != null) { editor.putBoolean("dontshowagain", true); editor.commit(); } dialog.dismiss(); } }); ll.addView(b3); dialog.setContentView(ll); dialog.show(); } } 

La integración de la clase es tan simple como añadir:

 AppRater.app_launched(this); 

A su actividad. Sólo se debe agregar a una actividad en la aplicación completa.

Yo uso este: https://github.com/kskkbys/Android-RateThisApp – agradable, un poco de comportamiento discreto. Imágenes de RateThisApp de kskkbys

Mi uno usando DialogFragment:

 public class RateItDialogFragment extends DialogFragment { private static final int LAUNCHES_UNTIL_PROMPT = 10; private static final int DAYS_UNTIL_PROMPT = 3; private static final int MILLIS_UNTIL_PROMPT = DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000; private static final String PREF_NAME = "APP_RATER"; private static final String LAST_PROMPT = "LAST_PROMPT"; private static final String LAUNCHES = "LAUNCHES"; private static final String DISABLED = "DISABLED"; public static void show(Context context, FragmentManager fragmentManager) { boolean shouldShow = false; SharedPreferences sharedPreferences = getSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); long currentTime = System.currentTimeMillis(); long lastPromptTime = sharedPreferences.getLong(LAST_PROMPT, 0); if (lastPromptTime == 0) { lastPromptTime = currentTime; editor.putLong(LAST_PROMPT, lastPromptTime); } if (!sharedPreferences.getBoolean(DISABLED, false)) { int launches = sharedPreferences.getInt(LAUNCHES, 0) + 1; if (launches > LAUNCHES_UNTIL_PROMPT) { if (currentTime > lastPromptTime + MILLIS_UNTIL_PROMPT) { shouldShow = true; } } editor.putInt(LAUNCHES, launches); } if (shouldShow) { editor.putInt(LAUNCHES, 0).putLong(LAST_PROMPT, System.currentTimeMillis()).commit(); new RateItDialogFragment().show(fragmentManager, null); } else { editor.commit(); } } private static SharedPreferences getSharedPreferences(Context context) { return context.getSharedPreferences(PREF_NAME, 0); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setTitle(R.string.rate_title) .setMessage(R.string.rate_message) .setPositiveButton(R.string.rate_positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getActivity().getPackageName()))); getSharedPreferences(getActivity()).edit().putBoolean(DISABLED, true).commit(); dismiss(); } }) .setNeutralButton(R.string.rate_remind_later, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dismiss(); } }) .setNegativeButton(R.string.rate_never, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { getSharedPreferences(getActivity()).edit().putBoolean(DISABLED, true).commit(); dismiss(); } }).create(); } } 

Luego onCreate() en onCreate() de tu FragmentActivity principal:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... RateItDialogFragment.show(this, getFragmentManager()); } 

Estoy usando esta solución fácil. Sólo puede agregar esta biblioteca con gradle: https://github.com/fernandodev/easy-rating-dialog

 compile 'com.github.fernandodev.easyratingdialog:easyratingdialog:+' 

Utilice esta biblioteca, es simple y fácil .. https://github.com/hotchemi/Android-Rate

Agregando la dependencia ..

 dependencies { compile 'com.github.hotchemi:android-rate:0.5.6' } 

Esta solución es muy similar a las presentadas anteriormente. La única diferencia es que usted va a ser capaz de retrasar la solicitud del diálogo de calificación por lanzamientos y días. Si el botón me recuerda más tarde es presionado, entonces voy a retrasar el pop up durante 3 días y 10 lanzamientos. Lo mismo se hace para aquellos que se seleccionaron para calificarlo, sin embargo los retrasos son más largos (no molestar al usuario tan pronto en caso de que realmente ha calificado la aplicación. Esto se puede cambiar para no volver a mostrarse, entonces usted tendrá que Alterar el código a su gusto). Espero que ayude a alguien!

 public class AppRater { private final static String APP_TITLE = "your_app_name"; private static String PACKAGE_NAME = "your_package_name"; private static int DAYS_UNTIL_PROMPT = 5; private static int LAUNCHES_UNTIL_PROMPT = 10; private static long EXTRA_DAYS; private static long EXTRA_LAUCHES; private static SharedPreferences prefs; private static SharedPreferences.Editor editor; private static Activity activity; public static void app_launched(Activity activity1) { activity = activity1; Configs.sendScreenView("Avaliando App", activity); PACKAGE_NAME = activity.getPackageName(); prefs = activity.getSharedPreferences("apprater", Context.MODE_PRIVATE); if (prefs.getBoolean("dontshowagain", false)) return; editor = prefs.edit(); EXTRA_DAYS = prefs.getLong("extra_days", 0); EXTRA_LAUCHES = prefs.getLong("extra_launches", 0); // Increment launch counter long launch_count = prefs.getLong("launch_count", 0) + 1; editor.putLong("launch_count", launch_count); // Get date of first launch Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0); if (date_firstLaunch == 0) { date_firstLaunch = System.currentTimeMillis(); editor.putLong("date_firstlaunch", date_firstLaunch); } // Wait at least n days before opening if (launch_count >= (LAUNCHES_UNTIL_PROMPT + EXTRA_LAUCHES)) if (System.currentTimeMillis() >= date_firstLaunch + (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000) + EXTRA_DAYS) showRateDialog(); editor.commit(); } public static void showRateDialog() { final Dialog dialog = new Dialog(activity); dialog.setTitle("Deseja avaliar o aplicativo " + APP_TITLE + "?"); LinearLayout ll = new LinearLayout(activity); ll.setOrientation(LinearLayout.VERTICAL); ll.setPadding(5, 5, 5, 5); TextView tv = new TextView(activity); tv.setTextColor(activity.getResources().getColor(R.color.default_text)); tv.setText("Ajude-nos a melhorar o aplicativo com sua avaliação no Google Play!"); tv.setWidth(240); tv.setGravity(Gravity.CENTER); tv.setPadding(5, 5, 5, 5); ll.addView(tv); Button b1 = new Button(activity); b1.setTextColor(activity.getResources().getColor(R.color.default_text)); b1.setBackground(activity.getResources().getDrawable(R.drawable.rounded_blue_box)); b1.setTextColor(Color.WHITE); b1.setText("Avaliar aplicativo " + APP_TITLE + "!"); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { Configs.sendHitEvents(Configs.APP_RATER, Configs.CATEGORIA_ANALYTICS, "Clique", "Avaliar", activity); activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + PACKAGE_NAME))); delayDays(60); delayLaunches(30); dialog.dismiss(); } }); ll.addView(b1); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) b1.getLayoutParams(); params.setMargins(5, 3, 5, 3); b1.setLayoutParams(params); Button b2 = new Button(activity); b2.setTextColor(activity.getResources().getColor(R.color.default_text)); b2.setBackground(activity.getResources().getDrawable(R.drawable.rounded_blue_box)); b2.setTextColor(Color.WHITE); b2.setText("Lembre-me mais tarde!"); b2.setOnClickListener(new OnClickListener() { public void onClick(View v) { Configs.sendHitEvents(Configs.APP_RATER, Configs.CATEGORIA_ANALYTICS, "Clique", "Avaliar Mais Tarde", activity); delayDays(3); delayLaunches(10); dialog.dismiss(); } }); ll.addView(b2); params = (LinearLayout.LayoutParams) b2.getLayoutParams(); params.setMargins(5, 3, 5, 3); b2.setLayoutParams(params); Button b3 = new Button(activity); b3.setTextColor(activity.getResources().getColor(R.color.default_text)); b3.setBackground(activity.getResources().getDrawable(R.drawable.rounded_blue_box)); b3.setTextColor(Color.WHITE); b3.setText("Não, obrigado!"); b3.setOnClickListener(new OnClickListener() { public void onClick(View v) { Configs.sendHitEvents(Configs.APP_RATER, Configs.CATEGORIA_ANALYTICS, "Clique", "Não Avaliar", activity); if (editor != null) { editor.putBoolean("dontshowagain", true); editor.commit(); } dialog.dismiss(); } }); ll.addView(b3); params = (LinearLayout.LayoutParams) b3.getLayoutParams(); params.setMargins(5, 3, 5, 0); b3.setLayoutParams(params); dialog.setContentView(ll); dialog.show(); } private static void delayLaunches(int numberOfLaunches) { long extra_launches = prefs.getLong("extra_launches", 0) + numberOfLaunches; editor.putLong("extra_launches", extra_launches); editor.commit(); } private static void delayDays(int numberOfDays) { Long extra_days = prefs.getLong("extra_days", 0) + (numberOfDays * 1000 * 60 * 60 * 24); editor.putLong("extra_days", extra_days); editor.commit(); } } 

Los botones tienen un color y un fondo específicos. El fondo es como se muestra en este archivo xml:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:padding="10dp" android:shape="rectangle" > <solid android:color="#2E78B9" /> <corners android:bottomLeftRadius="6dp" android:bottomRightRadius="6dp" android:topLeftRadius="6dp" android:topRightRadius="6dp" /> </shape> 

Source: Android approach for "Calificar mi aplicación"

Como puedes ver en el otro artículo que hayas vinculado, no hay forma de que la aplicación sepa si el usuario ha dejado una revisión o no. Y por buenas razones.

Piense en ello, si una aplicación podría decir si el usuario ha dejado una revisión o no, el desarrollador podría restringir ciertas características que sólo se desbloquearía si el usuario deja una calificación 5/5. Esto llevaría a los otros usuarios de Google Play a no confiar en las revisiones y socavaría el sistema de calificación.

Las soluciones alternativas que he visto es que la aplicación le recuerda al usuario que envíe una calificación cada vez que la aplicación se abre un número específico de veces, o un intervalo establecido. Por ejemplo, cada diez veces que se abre la aplicación, pida al usuario que deje una calificación y proporcione un botón "ya hecho" y "me recuerde más tarde". Sigue mostrando este mensaje si el usuario ha decidido recordarlo más tarde. Algunos otros desarrolladores de aplicaciones muestran este mensaje con un intervalo creciente (como, 5, 10, 15ª vez que se abre la aplicación), porque si un usuario no ha dejado una revisión en, por ejemplo, la centésima vez que se abrió la aplicación, es Probablemente probablemente él / ella no va a dejar uno.

Esta solución no es perfecta, pero creo que es lo mejor que tienes por ahora. Lo lleva a confiar en el usuario, pero se da cuenta de que la alternativa significaría una experiencia potencialmente peor para todos en el mercado de aplicaciones.

Creo que lo que está tratando de hacer es probablemente contraproducente.

Hacer que sea fácil para las personas clasificar las aplicaciones es generalmente una buena idea, ya que la mayoría de las personas que se molestan en hacerlo porque les gusta la aplicación. Se rumorea que el número de calificaciones afecta su calificación de mercado (aunque veo poca evidencia de esto). Hassling usuarios en la clasificación – a través de las pantallas de nag – es probable que cause a la gente a limpiar el nag a través de dejar una mala calificación.

Añadir la capacidad de valorar directamente una aplicación ha causado una ligera disminución en las calificaciones numéricas de mi versión gratuita y un ligero aumento en mi aplicación de pago. Para la aplicación gratuita, mi clasificación de 4 estrellas aumentó más de mis calificaciones de 5 estrellas, como la gente que pensaba que mi aplicación era buena, pero no grande comenzó a calificar también. El cambio fue de -0,2. Para el pago, el cambio fue de +0,1. Debería eliminarlo de la versión gratuita, excepto que me gusta recibir muchos comentarios.

Puse mi botón de clasificación en una pantalla de configuración (preferencia), donde no afecta el funcionamiento normal. Todavía aumentó mi tasa de clasificación por un factor de 4 o 5. No tengo ninguna duda de que si he intentado molesto a mis usuarios a hacer una calificación, me gustaría obtener un montón de usuarios que me dan malas calificaciones como una protesta.

  • Aplicación Publisher
  • Google Play (mercado) notificaciones de nuevos comentarios de calificaciones
  • Hipervínculo en la descripción de Android Market
  • Apk actualización para la tableta, todavía dice "Diseñado para teléfonos"
  • Cómo determinar qué mercado de android se utilizó para descargar mi aplicación
  • Publicación de aplicaciones pagadas en Android Market - India
  • Cómo subir apk a la tienda de juego que tiene más de 100 MB de tamaño?
  • Android: ID de producto en la aplicación
  • Google Play Store: la página de mi aplicación no muestra los iconos de las tablas de clasificación y los logros.
  • Cupones para la facturación integrada en la aplicación
  • Android Play Store mercado: // enlace ya no funciona?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.