Vérifier par programme le Play Store pour les mises à jour de l’application

J’ai mis mon application sur le Google Play Store. Il a été installé par de nombreux clients de mon entreprise. Je comprends le mécanisme de mise à niveau de l’application.

Les utilisateurs doivent cocher la case de mise à jour automatique dans l’application Playstore pour chaque application qu’ils souhaitent mettre à jour automatiquement. Cependant, certains utilisateurs l’ont décoché ou ne l’ont pas vérifié en premier lieu.

L’application que j’ai écrite est destinée à l’indussortinge des soins et est utilisée par les soignants pour fournir des soins à domicile. Certains de nos clients ont 1200 aidants. Ils devraient appeler tous les soignants au bureau pour mettre à jour les téléphones individuellement. C’est évidemment inacceptable.

Existe-t-il un moyen de vérifier par programmation s’il existe une version mise à jour de mon application sur le Play Store?

Puis-je avoir un code qui s’exécute chaque fois que l’utilisateur lance l’application qui vérifie le Play Store? S’il existe une version mise à jour, l’utilisateur peut être dirigé vers le magasin de lecture. Cela signifie qu’il n’est pas essentiel de faire vérifier la mise à jour automatique.

Merci d’avance

Mat

AFAIK, il n’y a pas d’API Google officielle qui supporte cela.

Vous devriez envisager d’obtenir un numéro de version à partir d’une API.

Au lieu de vous connecter à des API ou à des pages Web externes (comme Google Play Store). Il y a un risque que quelque chose change dans l’API ou la page Web, vous devriez donc envisager de vérifier si le code de version de l’application actuelle est inférieur au numéro de version que vous obtenez de votre propre API.

Rappelez-vous simplement si vous mettez à jour votre application, vous devez changer la version dans votre propre API avec le numéro de version de l’application.

Je vous recommande de créer un fichier dans votre propre site Web ou API, avec le numéro de version. (Éventuellement faire un job cron et rendre la mise à jour automatique de la version, et envoyer une notification en cas de problème)

Vous devez obtenir cette valeur depuis votre page Google Play Store:

xxx

Vérifiez dans votre application si la version utilisée sur le mobile est inférieure à la version nummer affichée sur votre propre API.

Indique qu’il / elle doit mettre à jour avec une notification, idéalement.

Les choses que tu peux faire

Numéro de version utilisant votre propre API

Avantages:

  • Pas besoin de charger l’intégralité du code du Google Play Store (sauvegarde des données / bande passante)

Les inconvénients:

  • L’utilisateur peut être déconnecté, ce qui rend la vérification inutile car il est impossible d’accéder à l’API

Numéro de version sur la page Web Google Play Store

Avantages:

  • Vous n’avez pas besoin d’une API

Les inconvénients:

  • L’utilisateur peut être déconnecté, ce qui rend la vérification inutile car il est impossible d’accéder à l’API
    • L’utilisation de cette méthode peut coûter plus de bande passante / données mobiles à vos utilisateurs
    • La page Web de Play Store peut changer, ce qui fait que votre version «ripper» ne fonctionne plus.

Inclure JSoup dans votre fichier apps build.gradle:

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

et obtenir la version actuelle comme:

 currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; 

Et exécuter le thread suivant:

 private class GetVersionCode extends AsyncTask { @Override protected Ssortingng doInBackground(Void... voids) { Ssortingng newVersion = null; try { newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.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(Ssortingng onlineVersion) { super.onPostExecute(onlineVersion); if (onlineVersion != null && !onlineVersion.isEmpty()) { if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) { //show dialog } } Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion); } 

Pour plus de détails, visitez: http://revisitingandroid.blogspot.in/2016/12/programmatically-check-play-store-for.html

Firebase Remote Config pourrait être une solution possible et fiable pour le moment, car Google n’y exposait aucun fichier.

Vérifiez les documents de configuration à distance de Firebase

Étapes 1.Créez un projet Firebase et ajoutez google_play_service.json à votre projet.

2.Créez des clés telles que “android_latest_version_code” et “android_latest_version_name” dans la console firebase-> Remote Config

3. Code Android

  public void initializeFirebase() { if (FirebaseApp.getApps(mContext).isEmpty()) { FirebaseApp.initializeApp(mContext, FirebaseOptions.fromResource(mContext)); } final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); config.setConfigSettings(configSettings); } 

Obtenir le nom et le code de la version actuelle

 int playStoreVersionCode = FirebaseRemoteConfig.getInstance().getSsortingng( "android_latest_version_code"); PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0); int currentAppVersionCode = pInfo.versionCode; if(playStoreVersionCode>currentAppVersionCode){ //Show update popup or whatever best for you } 

4. Et gardez firebase “android_latest_version_code” et “android_latest_version_name” à jour avec le nom et le code de votre version de production actuelle.

La configuration à distance de Firebase fonctionne à la fois sur Android et IPhone.

Vous pouvez obtenir la version Playstore actuelle en utilisant JSoup avec quelques modifications comme ci-dessous:

 @Override protected Ssortingng doInBackground(Void... voids) { Ssortingng newVersion = null; try { newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.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(".hAyfc .htlgb") .get(7) .ownText(); return newVersion; } catch (Exception e) { return newVersion; } } @Override protected void onPostExecute(Ssortingng onlineVersion) { super.onPostExecute(onlineVersion); Log.d("update", "playstore version " + onlineVersion); } 

réponse de @Tarun ne fonctionne plus.

Il y a la bibliothèque AppUpdater . Comment inclure:

  1. Ajoutez le référentiel à votre projet build.gradle :
 allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } } 
  1. Ajoutez la bibliothèque à votre module build.gradle :
 dependencies { comstack 'com.github.javiersantos:AppUpdater:2.6.4' } 
  1. Ajoutez les permissions INTERNET et ACCESS_NETWORK_STATE au manifeste de votre application:
   
  1. Ajoutez ceci à votre activité:
 AppUpdater appUpdater = new AppUpdater(this); appUpdater.start(); 

Configurez un serveur qui expose une URL HTTP qui rapporte la dernière version, puis utilisez un AlarmManager pour appeler cette URL et voir si la version sur le périphérique est identique à la dernière version. Si ce n’est pas le cas, affichez un message ou une notification et envoyez-les au marché pour les mettre à niveau.

Il existe quelques exemples de code: Comment permettre aux utilisateurs de vérifier la dernière version de l’application depuis l’intérieur de l’application?

Venir à partir d’une application hybride POV. Ceci est un exemple javascript, j’ai un pied de page de mise à jour disponible dans mon menu principal. Si une mise à jour est disponible (c’est-à-dire que mon numéro de version dans le fichier de configuration est inférieur à la version récupérée, affichez le pied de page). L’utilisateur sera alors dirigé vers l’application / le magasin où l’utilisateur pourra cliquer sur le bouton Mettre à jour.

Je reçois également les nouvelles données (c.-à-d. Les notes de version) et les affiche dans un modal lors de la connexion si c’est la première fois sur cette version.

Sur le périphérique prêt, définissez l’URL de votre magasin

  if (device.platform == 'iOS') storeURL = 'https://itunes.apple.com/lookup?bundleId=BUNDLEID'; else storeURL = 'https://play.google.com/store/apps/details?id=BUNDLEID'; 

La méthode de mise à jour disponible peut être exécutée aussi souvent que vous le souhaitez. Le mien est lancé chaque fois que l’utilisateur navigue vers l’écran d’accueil.

 function isUpdateAvailable() { if (device.platform == 'iOS') { $.ajax(storeURL, { type: "GET", cache: false, dataType: 'json' }).done(function (data) { isUpdateAvailable_iOS(data.results[0]); }).fail(function (jqXHR, textStatus, errorThrown) { commsErrorHandler(jqXHR, textStatus, false); }); } else { $.ajax(storeURL, { type: "GET", cache: false }).done(function (data) { isUpdateAvailable_Android(data); }).fail(function (jqXHR, textStatus, errorThrown) { commsErrorHandler(jqXHR, textStatus, false); }); } } 

iOS Callback: Apple a une API, donc très facile à obtenir

 function isUpdateAvailable_iOS (data) { var storeVersion = data.version; var releaseNotes = data.releaseNotes; // Check store Version Against My App Version ('1.14.3' -> 1143) var _storeV = parseInt(storeVersion.replace(/\./g, '')); var _appV = parseInt(appVersion.subssortingng(1).replace(/\./g, '')); $('#ft-main-menu-btn').off(); if (_storeV > _appV) { // Update Available $('#ft-main-menu-btn').text('Update Available'); $('#ft-main-menu-btn').click(function () { openStore(); }); } else { $('#ft-main-menu-btn').html(' '); // Release Notes settings.updateReleaseNotes('v' + storeVersion, releaseNotes); } } 

Android Callback: PlayStore vous devez gratter, comme vous pouvez le voir, la version est relativement facile à saisir et les nouveautés que je prends au format HTML au lieu du texte car je peux utiliser leur formatage (c.-à-d. De nouvelles lignes, etc.)

 function isUpdateAvailable_Android(data) { var html = $(data); var storeVersion = html.find('div[itemprop=softwareVersion]').text().sortingm(); var releaseNotes = html.find('.whatsnew')[0].innerHTML; // Check store Version Against My App Version ('1.14.3' -> 1143) var _storeV = parseInt(storeVersion.replace(/\./g, '')); var _appV = parseInt(appVersion.subssortingng(1).replace(/\./g, '')); $('#ft-main-menu-btn').off(); if (_storeV > _appV) { // Update Available $('#ft-main-menu-btn').text('Update Available'); $('#ft-main-menu-btn').click(function () { openStore(); }); } else { $('#ft-main-menu-btn').html(' '); // Release Notes settings.updateReleaseNotes('v' + storeVersion, releaseNotes); } } 

La logique de magasin ouvert est simple, mais complète

 function openStore() { var url = 'https://itunes.apple.com/us/app/appname/idUniqueID'; if (device.platform != 'iOS') url = 'https://play.google.com/store/apps/details?id=appid' window.open(url, '_system') } 

Assurez-vous que Play Store et App Store ont été inclus dans la liste blanche:

    

La réponse de @Tarun fonctionnait parfaitement.Mais maintenant, ce n’est pas le cas, en raison des récentes modifications de Google sur le site Web Google Play.

Changez simplement ceux de la réponse de @Tarun.

 class GetVersionCode extends AsyncTask { @Override protected Ssortingng doInBackground(Void... voids) { Ssortingng 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(Ssortingng 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); } } 

et n'oubliez pas d'append la bibliothèque JSoup

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

et sur Oncreate ()

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Ssortingng currentVersion; try { currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } new GetVersionCode().execute(); } 

c'est ça .. Merci à ce lien

Il n’y a pas d’API GooglePlay officielle pour le faire.

Mais vous pouvez utiliser cette bibliothèque non officielle pour obtenir les données de version de l’application.

Et si ce qui précède ne vous convient pas, vous pouvez toujours vous connecter à la page de votre application (par exemple https://play.google.com/store/apps/details?id=com.shots.android&hl=en ) et parsingr le champ “Version actuelle”.

Vous pouvez essayer le code suivant en utilisant Jsoup

 Ssortingng latestVersion = doc.getElementsContainingOwnText("Current Version").parents().first().getAllElements().last().text(); 

En dehors de l’utilisation de JSoup, nous pouvons également faire une correspondance de modèle pour obtenir la version de l’application depuis playStore.

Pour faire correspondre le dernier modèle de google playstore, à savoir

Current Version

XXX

nous devons d’abord faire correspondre la séquence de noeuds ci-dessus et ensuite, à partir de la séquence ci-dessus, obtenir la valeur de la version. Voici l’extrait de code pour le même:

  private Ssortingng getAppVersion(Ssortingng patternSsortingng, Ssortingng inputSsortingng) { try{ //Create a pattern Pattern pattern = Pattern.comstack(patternSsortingng); if (null == pattern) { return null; } //Match the pattern ssortingng in provided ssortingng Matcher matcher = pattern.matcher(inputSsortingng); if (null != matcher && matcher.find()) { return matcher.group(1); } }catch (PatternSyntaxException ex) { ex.printStackTrace(); } return null; } private Ssortingng getPlayStoreAppVersion(Ssortingng appUrlSsortingng) { final Ssortingng currentVersion_PatternSeq = "]*?>Current\\sVersion]*?>(.*?)>]*?>(.*?)>]*?>(.*?)"; final Ssortingng appVersion_PatternSeq = "htlgb\">([^<]*)XXX playStoreAppVersion = getAppVersion (appVersion_PatternSeq, versionSsortingng); } return playStoreAppVersion; } 

Je l’ai fait résoudre grâce à cela, car cela fonctionne pour les dernières modifications apscopes au Google Playstore. J’espère que cela pourra aider.

confirmé que cette méthode fonctionne maintenant:

 newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + AcMainPage.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(".hAyfc .htlgb") .get(5) .ownText(); 

Celui-ci fonctionne .. Testé ..

 @Override protected Ssortingng doInBackground(Void... voids) { Ssortingng newVersion = null; try { newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.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(".hAyfc .htlgb") .get(5) .ownText(); return newVersion; } catch (Exception e) { return newVersion; } } @Override protected void onPostExecute(Ssortingng onlineVersion) { super.onPostExecute(onlineVersion); Log.d("update", "playstore version " + onlineVersion); } 

Vérifier par programme le Play Store pour les mises à jour de l’application

La méthode Inside OnCreate permet d’écrire sous le code ..

 VersionChecker versionChecker = new VersionChecker(); try { latestVersion = versionChecker.execute().get(); Toast.makeText(getBaseContext(), latestVersion , Toast.LENGTH_SHORT).show(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } 

Cela vous permet de jouer à la version magasin de l’application ..

alors vous devez vérifier la version de l’application comme ci-dessous

 PackageManager manager = getPackageManager(); PackageInfo info = null; try { info = manager.getPackageInfo(getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } assert info != null; version = info.versionName; 

Après cela, vous pouvez le comparer avec la version du magasin et configurer vos propres écrans de mise à jour

 if(version.equals(latestVersion)){ Toast.makeText(getBaseContext(), "No Update" , Toast.LENGTH_SHORT).show(); }else { Toast.makeText(getBaseContext(), "Update" , Toast.LENGTH_SHORT).show(); } 

Et ajoutez VersionChecker.class comme ci-dessous

la classe publique VersionChecker étend AsyncTask {

 private Ssortingng newVersion; @Override protected Ssortingng doInBackground(Ssortingng... params) { try { 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(".hAyfc .htlgb") .get(7) .ownText(); } catch (IOException e) { e.printStackTrace(); } return newVersion; } 

}