it-swarm.com.de

Wie können Benutzer in der App nach der neuesten App-Version suchen?

Ich möchte in Apps eine Schaltfläche "Nach Updates suchen" hinzufügen, damit beim Klicken auf diese Schaltfläche ein Toastnachrichten-/Fortschrittsdialog zur Überprüfung der App-Version angezeigt wird.

Wenn eine neue Version gefunden wird, wird diese von den Apps automatisch auf das Telefon heruntergeladen und der Benutzer kann die aktualisierten Apps manuell installieren.

Oder eine andere Methode reicht aus solange nach der neuesten Version gesucht werden kann und der Benutzer benachrichtigt wird, dass eine Aktualisierung durchgeführt werden soll.

54
xDragonZ

Google hat den Play Store zwei Monate zuvor aktualisiert. Dies ist die Lösung, die gerade für mich funktioniert.

class GetVersionCode extends AsyncTask<Void, String, String> {

    @Override

    protected String doInBackground(Void... voids) {

        String newVersion = null;

        try {
            Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName()  + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get();
            if (document != null) {
                Elements element = document.getElementsContainingOwnText("Current Version");
                for (Element ele : element) {
                    if (ele.siblingElements() != null) {
                        Elements sibElemets = ele.siblingElements();
                        for (Element sibElemet : sibElemets) {
                            newVersion = sibElemet.text();
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;

    }


    @Override

    protected void onPostExecute(String onlineVersion) {

        super.onPostExecute(onlineVersion);

        if (onlineVersion != null && !onlineVersion.isEmpty()) {

            if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
                //show anything
            }

        }

        Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);

    }
}

und vergessen Sie nicht, die JSoup-Bibliothek hinzuzufügen

dependencies {
compile 'org.jsoup:jsoup:1.8.3'}

und auf Oncreate ()

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


    String currentVersion;
    try {
        currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

    new GetVersionCode().execute();

}

das wars .. danke an diesen link

11
Rajesh Naddy

Um Zeit beim Schreiben zu sparen, habe ich das Update für Android App) als Bibliothek und Open Source unter https://github.com/winsontan520/Android-WVersionManager geschrieben =

44
winsontan520

Sie können diese Android Library: https://github.com/danielemaddaluno/Android-Update-Checker verwenden. Ziel ist es, ein wiederverwendbares Instrument bereitzustellen, mit dem asynchron überprüft werden kann, ob Es gibt ein neueres veröffentlichtes Update Ihrer App im Store. Es basiert auf der Verwendung von Jsoup ( http://jsoup.org/ ), um zu testen, ob ein neues Update vorhanden ist, auf dem die App-Seite analysiert wird der Google Play Store:

private boolean web_update(){
    try {       
        String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName; 
        String newVersion = curVersion;
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + package_name + "&hl=en")
                .timeout(30000)
                .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                .referrer("http://www.google.com")
                .get()
                .select("div[itemprop=softwareVersion]")
                .first()
                .ownText();
        return (value(curVersion) < value(newVersion)) ? true : false;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

Und als "Wert" funktioniert folgendes (funktioniert, wenn die Werte zwischen 0 und 99 liegen):

private long value(String string) {
    string = string.trim();
    if( string.contains( "." )){ 
        final int index = string.lastIndexOf( "." );
        return value( string.substring( 0, index ))* 100 + value( string.substring( index + 1 )); 
    }
    else {
        return Long.valueOf( string ); 
    }
}

Wenn Sie nur eine Nichtübereinstimmung zwischen Versionen überprüfen möchten, können Sie Folgendes ändern:

value(curVersion) < value(newVersion) mit value(curVersion) != value(newVersion)

38
madx

Wenn es sich um eine Anwendung auf dem Markt handelt, lösen Sie beim Start der App die Absicht aus, die Market-App zu öffnen, damit nach Updates gesucht wird.

Andernfalls ist das Implementieren und Aktualisieren von Checker ziemlich einfach. Hier ist mein Code (ungefähr) dafür:

String response = SendNetworkUpdateAppRequest(); // Your code to do the network request
                                                 // should send the current version
                                                 // to server
if(response.equals("YES")) // Start Intent to download the app user has to manually install it by clicking on the notification
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("URL TO LATEST APK")));

Natürlich sollten Sie dies umschreiben, um die Anfrage in einem Hintergrund-Thread zu erledigen, aber Sie bekommen die Idee.

Wenn Sie etwas etwas komplexeres mögen, aber Ihre App das Update automatisch anwenden kann, lesen Sie hier .

26
Jasoneer

Navigieren Sie zu Ihrer Wiedergabeseite:

https://play.google.com/store/apps/details?id=com.yourpackage

Verwenden eines Standard-HTTP-GET. Jetzt findet die folgende jQuery wichtige Informationen für Sie:

Aktuelle Version

$("[itemprop='softwareVersion']").text()

Was gibt's Neues

$(".recent-change").each(function() { all += $(this).text() + "\n"; })

Nachdem Sie diese Informationen manuell extrahieren können, erstellen Sie in Ihrer App einfach eine Methode, die dies für Sie ausführt.

public static String[] getAppVersionInfo(String playUrl) {
    HtmlCleaner cleaner = new HtmlCleaner();
    CleanerProperties props = cleaner.getProperties();
    props.setAllowHtmlInsideAttributes(true);
    props.setAllowMultiWordAttributes(true);
    props.setRecognizeUnicodeChars(true);
    props.setOmitComments(true);
    try {
        URL url = new URL(playUrl);
        URLConnection conn = url.openConnection();
        TagNode node = cleaner.clean(new InputStreamReader(conn.getInputStream()));
        Object[] new_nodes = node.evaluateXPath("//*[@class='recent-change']");
        Object[] version_nodes = node.evaluateXPath("//*[@itemprop='softwareVersion']");

        String version = "", whatsNew = "";
        for (Object new_node : new_nodes) {
            TagNode info_node = (TagNode) new_node;
            whatsNew += info_node.getAllChildren().get(0).toString().trim()
                    + "\n";
        }
        if (version_nodes.length > 0) {
            TagNode ver = (TagNode) version_nodes[0];
            version = ver.getAllChildren().get(0).toString().trim();
        }
        return new String[]{version, whatsNew};
    } catch (IOException | XPatherException e) {
        e.printStackTrace();
        return null;
    }
}

Verwendet HtmlCleaner

5
user586399

hinzufügen compile 'org.jsoup:jsoup:1.10.2' zu Abhängigkeiten in APP LEVEL build.gradle

&

Fügen Sie einfach den folgenden Code hinzu und Sie können loslegen.

private class GetVersionCode extends AsyncTask<Void, String, String> {
    @Override
    protected String doInBackground(Void... voids) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + SplashActivity.this.getPackageName() + "&hl=it")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select("div[itemprop=softwareVersion]")
                    .first()
                    .ownText();
            return newVersion;
        } catch (Exception e) {
            return newVersion;
        }
    }

    @Override
    protected void onPostExecute(String onlineVersion) {
        super.onPostExecute(onlineVersion);

        if (!currentVersion.equalsIgnoreCase(onlineVersion)) {
            //show dialog
            new AlertDialog.Builder(context)
                    .setTitle("Updated app available!")
                    .setMessage("Want to update app?")
                    .setPositiveButton("Update", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // continue with delete
                            final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
                            try {
                                Toast.makeText(getApplicationContext(), "App is in BETA version cannot update", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                            } catch (ActivityNotFoundException anfe) {
                                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                            }
                        }
                    })
                    .setNegativeButton("Later", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // do nothing
                            dialog.dismiss();
                            new MyAsyncTask().execute();
                        }
                    })
                    .setIcon(Android.R.drawable.ic_dialog_alert)
                    .show();

        }
    }
}
4
Andi

Es gibt keine API dafür und Sie können sie nicht automatisch installieren. Sie können sie einfach auf die Market-Seite umleiten, damit sie ein Upgrade durchführen können. Sie können Ihre neueste Version in einer Datei auf einem Webserver speichern und von der App überprüfen lassen. Hier ist eine Implementierung davon:

http://code.google.com/p/openintents/source/browse/#svn%2Ftrunk%2FUpdateCheckerApp

2
Nikolay Elenkov

Sie sollten zuerst die auf dem Markt erhältliche App-Version überprüfen und mit der Version der App auf dem Gerät vergleichen. Wenn sie unterschiedlich sind, ist möglicherweise ein Update verfügbar. In diesem Beitrag habe ich den Code zum Abrufen der aktuellen Version von market und der aktuellen Version auf dem Gerät notiert und miteinander verglichen. Ich habe auch gezeigt, wie der Aktualisierungsdialog angezeigt und der Benutzer zur Aktualisierungsseite weitergeleitet wird. Bitte besuchen Sie diesen Link: https://stackoverflow.com/a/33925032/5475941

0
Vahid