web-dev-qa-db-fra.com

Vérification de la version de mon application par programme sur Android Market

Actuellement, je vérifie le code de version de l'application au lancement et le fais correspondre au dernier code de version sur mon serveur. Sur cette base, j'envoie l'utilisateur à la dernière mise à jour d'Android Market.

Cela fonctionne bien, mais mon problème est que je dois modifier manuellement le code de la dernière version sur mon serveur et je ne sais pas exactement quand la nouvelle version de APK sera activée sur le marché.

Existe-t-il un moyen de vérifier directement le code de version de l'application sur Android Market afin de pouvoir envoyer l'utilisateur directement sur le marché lorsque le nouvel apk est activé?

24
mrYogi

Google Play ne fournit aucune API officielle permettant de récupérer les métadonnées. Vous pouvez toutefois vérifier l’API non officielle à l’adresse http://code.google.com/p/Android-market-api/

Plus précisément, consultez la page Wiki HowToSearchApps . La réponse à la requête contient des informations sur la version:

{
  "app": [
    {
      "rating": "4.642857142857143",
      "title": "Ruboto IRB",
      "ratingsCount": 14,
      "creator": "Jan Berkel",
      "appType": "APPLICATION",
      "id": "9089465703133677000",
      "packageName": "org.jruby.ruboto.irb",
      "version": "0.1",
      "versionCode": 1,
      "creatorId": "\"Jan Berkel\"",
      "ExtendedInfo": {
        "category": "Tools",
        "permissionId": [
...
17
Rajesh

Nous pouvons faire un filtrage par motif pour obtenir la version de l'application depuis playStore. 

Pour faire correspondre le dernier modèle de Google PlayStore, à savoir <div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">X.X.X</span></div> nous devons d'abord faire correspondre la séquence de nœud ci-dessus, puis à partir de la séquence ci-dessus obtenir la valeur de version Ci-dessous l'extrait de code pour la même chose:

    private String getAppVersion(String patternString, String inputString) {
        try{
            //Create a pattern
            Pattern pattern = Pattern.compile(patternString);
            if (null == pattern) {
                return null;
            }

            //Match the pattern string in provided string
            Matcher matcher = pattern.matcher(inputString);
            if (null != matcher && matcher.find()) {
                return matcher.group(1);
            }

        }catch (PatternSyntaxException ex) {

            ex.printStackTrace();
        }

        return null;
    }


    private String getPlayStoreAppVersion(String appUrlString) {
        final String currentVersion_PatternSeq = "<div[^>]*?>Current\\sVersion</div><span[^>]*?>(.*?)><div[^>]*?>(.*?)><span[^>]*?>(.*?)</span>";
        final String appVersion_PatternSeq = "htlgb\">([^<]*)</s";
        String playStoreAppVersion = null;

        BufferedReader inReader = null;
        URLConnection uc = null;
        StringBuilder urlData = new StringBuilder();

        final URL url = new URL(appUrlString);
        uc = url.openConnection();
        if(uc == null) {
           return null;
        }
        uc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
        inReader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
        if (null != inReader) {
            String str = "";
            while ((str = inReader.readLine()) != null) {
                           urlData.append(str);
            }
        }

        // Get the current version pattern sequence 
        String versionString = getAppVersion (currentVersion_PatternSeq, urlData.toString());
        if(null == versionString){ 
            return null;
        }else{
            // get version from "htlgb">X.X.X</span>
            playStoreAppVersion = getAppVersion (appVersion_PatternSeq, versionString);
        }

        return playStoreAppVersion;
    }

J'ai résolu ceci à travers cela. J'espère que cela pourra aider.

1
DRK