it-swarm.com.de

Benutzer auffordern, eine Android-App in der App zu bewerten

In meiner Android-App möchte ich den Benutzer zu einem bestimmten Zeitpunkt auffordern, die App im Android-Markt zu bewerten.

Nachdem ich einen Ansatz gesucht habe, habe ich Code auf dieser Website gefunden. Dieser Code scheint sehr gut zu funktionieren.

Aber leider scheint dieser Code eine Fehlermeldung "Forced Close" (Zwangsschließung) auszulösen, wenn der Android Market nicht auf dem Telefon des Benutzers installiert ist. Gibt es eine Möglichkeit zu überprüfen, ob Android Market installiert ist, und wenn nicht, versuchen Sie nicht, den Code auszuführen?

Die Zeile, die den Fehler auslöst, ist wahrscheinlich diese, da sie den URI nicht analysieren kann:

mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + APP_PNAME)));

Gibt es übrigens noch andere Dinge, die in diesem Code verbessert werden könnten?

Bearbeiten:

Ein paar Jahre später habe ich den gesamten Code in ein kleines Bibliotheksprojekt eingefügt: AppRater auf GitHub

30
caw

Sie können getInstalledPackages () immer aus der PackageManager - Klasse aufrufen und prüfen, ob die Marktklasse installiert ist. Sie können auch queryIntentActivities () verwenden, um sicherzustellen, dass die von Ihnen konstruierte Absicht von etwas verarbeitet werden kann, auch wenn dies nicht die Marktanwendung ist. Dies ist wahrscheinlich das Beste, was zu tun ist, weil es das flexibelste und robusteste ist.

14
Kurtis Nusbaum

Hier ist der Code, den Sie benötigen (eine Zusammenfassung von Kurts Antwort und abgeleiteten Informationen sowie den Link und die Frage):

/* This code assumes you are inside an activity */
final Uri uri = Uri.parse("market://details?id=" + getApplicationContext().getPackageName());
final Intent rateAppIntent = new Intent(Intent.ACTION_VIEW, uri);

if (getPackageManager().queryIntentActivities(rateAppIntent, 0).size() > 0)
{
    startActivity(rateAppIntent);
}
else
{
    /* handle your error case: the device has no way to handle market urls */
}
36
xbakesx

Sie können RateMeMaybe auch verwenden: https://github.com/Kopfgeldjaeger/RateMeMaybe

Es gibt einige Optionen zum Konfigurieren (Minimum von Tagen/Starts bis zur ersten Eingabeaufforderung, Minimum von Tagen/Starts bis zu jeder nächsten Eingabeaufforderung, wenn der Benutzer "Nicht jetzt" wählt, Dialogtitel, Nachricht usw.). Es ist auch einfach zu bedienen.

Beispielanwendung aus README:

RateMeMaybe rmm = new RateMeMaybe(this);
rmm.setPromptMinimums(10, 14, 10, 30);
rmm.setDialogMessage("You really seem to like this app, "
                +"since you have already used it %totalLaunchCount% times! "
                +"It would be great if you took a moment to rate it.");
rmm.setDialogTitle("Rate this app");
rmm.setPositiveBtn("Yeeha!");
rmm.run();
9
Kopfgeldjaeger

Zuerst müssen Sie die Anwendungszeiten zählen.

SharedPreferences preferences = getSharedPreferences("progress", MODE_PRIVATE);
int appUsedCount = preferences.getInt("appUsedCount",0);
appUsedCount++;
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("appUsedCount", appUsedCount);
editor.apply();

if (appUsedCount==10 || appUsedCount==50 || appUsedCount==100 || appUsedCount==200 || appUsedCount==300){
    AskForRating(appUsedCount);
} else {
    finish();
}

Dann kannst du so auffordern;

private void AskForRating(int _appUsedCount){

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Please Rate Us");
    alert.setIcon(R.drawable.book);
    alert.setMessage("Thanks for using the application. If you like YOUR APP NAME please rate us! Your feedback is important for us!");
    alert.setPositiveButton("Rate it",new Dialog.OnClickListener(){
        public void onClick(DialogInterface dialog, int whichButton){
            String url = "https://play.google.com/store/apps/details?id=YOUR PACKAGE NAME";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);
        }
    });
    alert.setNegativeButton("Not now", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });
    alert.show();
}
5
DiRiNoiD

Mit diesem einfachen Code können Sie erreichen, was Sie möchten, Sie brauchen keine externen Bibliotheken oder irgendetwas. Setzen Sie es einfach auf das Ereignis OnCreate Ihrer Hauptaktivität. Die Variable RunEvery bestimmt, wie oft die Ratenmeldung angezeigt wird. Im Beispiel ist es auf 10 gesetzt.

// Count times app has been opened, display rating message after number of times  
// By Rafael Duval   
    try {

        // Get the app's shared preferences
        SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);

        // Get the value for the run counter
        int counter = app_preferences.getInt("counter", 0);

        // Do every x times
        int RunEvery = 10;

        if(counter != 0  && counter % RunEvery == 0 )
        {
            //Toast.makeText(this, "This app has been started " + counter + " times.", Toast.LENGTH_SHORT).show();

           AlertDialog.Builder alert = new AlertDialog.Builder(
                     MyActivity.this);
                   alert.setTitle("Please rate");
                   alert.setIcon(R.drawable.ic_launcher); //app icon here
                   alert.setMessage("Thanks for using this free app. Please take a moment to rate it.");

                   alert.setPositiveButton("Cancel",
                     new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog,
                        int whichButton) {                            
                          //Do nothing
                      }   
                     });

                   alert.setNegativeButton("Rate it",
                     new DialogInterface.OnClickListener() {

                      public void onClick(DialogInterface dialog, int which) {   

                           final String appName = getApplicationContext().getPackageName();
                           try {
                            startActivity(new Intent(Intent.ACTION_VIEW,
                              Uri.parse("market://details?id="
                                + appName)));
                           } catch (Android.content.ActivityNotFoundException anfe) {
                            startActivity(new Intent(
                              Intent.ACTION_VIEW,
                              Uri.parse("http://play.google.com/store/apps/details?id="
                                + appName)));
                           }   

                      }
                     });
                   alert.show();            
        }


        // Increment the counter
        SharedPreferences.Editor editor = app_preferences.edit();
        editor.putInt("counter", ++counter);
        editor.commit(); // Very important          

    } catch (Exception e) {
        //Do nothing, don't run but don't break
    }           
1
Yo Mismo

Nicht alle Android-Geräte nutzen den App-Markt. Kindle und Nook haben einen eigenen Marktplatz, daher ist die Notwendigkeit eines Codes zur Überprüfung, ob der Markt existiert oder nicht, gut. Obwohl es eine Möglichkeit geben sollte, die Bewertung an den richtigen Marktplatz zu senden, egal welcher es ist. Etwas zum Nachschauen.

1
Kapt Kaos

Wenn ich "market: // details? Id =" + getApplicationContext (). GetPackageName () verwende, öffnet sich der mobogenie-Markt für mich, daher bevorzuge ich https://play.google.com/store/apps/details ? id = "+ getApplicationContext (). getPackageName ()

0

Wenn die Anwendung über Android Market heruntergeladen wurde, wird Android Market auf dem Telefon installiert, daher sehe ich das nicht als Problem. Es scheint sehr komisch zu sein ...

Sie können Folgendes verwenden, um Android Market auf der Seite Ihrer Anwendung zu starten. Es ist etwas automatisierter:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("market://details?id=" + getPackageName()));
startActivity(i);
0
Michell Bak

verwenden Sie diesen Code

Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
// To count with Play market backstack, After pressing back button, 
// to taken back to our application, we need to add following flags to intent. 
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
    startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
    startActivity(new Intent(Intent.ACTION_VIEW,
            Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName())));
}
0
Pankaj Talaviya