157 votes

Forcer la mise à jour d'une application Android lorsqu'une nouvelle version est disponible

J'ai une application dans le Google Play Store. Lorsqu'une nouvelle version est disponible, l'ancienne version deviendra inutilisable - c'est-à-dire que si les utilisateurs ne mettent pas à jour l'application, ils ne peuvent pas entrer dans l'application. Comment puis-je forcer les utilisateurs à mettre à jour l'application lorsqu'une nouvelle version est disponible?

16voto

bsautner Points 1120

Les réponses de Scott et Michael sont correctes. Hébergez un service qui fournit un numéro de version min que vous supportez et comparez-le à la version installée. Vous ne devriez normalement jamais avoir besoin d'utiliser cela, mais c'est un sauveur de vie si une version est disponible que vous devez absolument éliminer en raison d'une faille sérieuse.

Je voulais juste ajouter le code pour ce qu'il faut faire ensuite. Voici comment vous lancez ensuite l'Intent Google Play et les emmenez vers votre nouvelle version dans le magasin après avoir averti l'utilisateur qu'il doit mettre à jour.

public class UpgradeActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upgrade);
        final String appName = "com.appname";
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

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

            }
        });
    }
}

Vous devriez reconsidérer votre conception si vous devez imposer des mises à jour à chaque nouvelle version.

14voto

Abdellah Points 5331

Officiellement, Google fournit une API Android pour cela.

L'API est actuellement en phase de test avec quelques partenaires, et sera bientôt disponible pour tous les développeurs.

Mise à jour L'API est maintenant disponible - https://developer.android.com/guide/app-bundle/in-app-updates

11voto

Chantell Osejo Points 796

Je vous recommande vivement de consulter la fonctionnalité Remote Config de Firebase pour cela.

Je l'ai implémenté en utilisant un paramètre - app_version_enabled - avec une condition "Versions Android désactivées" qui ressemble à ceci :

s'applique si l'ID de l'application == com.example.myapp et l'expression régulière de la version de l'application ^(5.6.1|5.4.2) 

La valeur par défaut du paramètre est "true", mais les Versions Android désactivées ont une valeur de false. Dans ma regex pour les Versions Android désactivées, vous pouvez ajouter simplement d'autres versions désactivées avec un autre |{nom de la version} à l'intérieur de ces parenthèses.

Ensuite, je vérifie simplement si la configuration indique si la version est activée ou non - j'ai une activité que je lance qui oblige l'utilisateur à effectuer la mise à jour. Je vérifie dans les seuls deux endroits où l'application peut être lancée de manière externe (mon activité de lancement par défaut et une activité de traitement des intents). Comme Remote Config fonctionne sur une base de cache, il ne capturera pas immédiatement les versions "désactivées" de l'application si le temps nécessaire pour invalider le cache n'est pas écoulé, mais cela est au plus de 12 heures si vous suivez leur valeur d'expiration du cache recommandée.

4voto

Mahesh Pandit Points 57

Vérifiez le code de version de l'APK locale et du Play Store

essayer {
        versionChecker VersionChecker = new versionChecker();
        String versionUpdated = VersionChecker.execute().get().toString();
        Log.i("code de version est", versionUpdated);

        PackageInfo packageInfo = null;
        essayer {
            packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        int version_code = packageInfo.versionCode;
        String version_name = packageInfo.versionName;
        Log.i("code de version mis à jour", String.valueOf(version_code) + "  " + version_name);
        si (version_name != versionUpdated) {
            String packageName = getApplicationContext().getPackageName();//
            UpdateMeeDialog updateMeeDialog = new UpdateMeeDialog();
            updateMeeDialog.showDialogAddRoute(MainActivity.this, packageName);
            Toast.makeText(getApplicationContext(), "Veuillez mettre à jour", Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        e.getStackTrace();
    }

implémenter la classe pour vérifier la version

class versionChecker extends AsyncTask {
String newVersion;

@Override
protected String doInBackground(String... params) {

    essayer {
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=+YOR_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();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return newVersion;
}
}

boîte de dialogue pour la mise à jour

public class UpdateMeeDialog {

ActivityManager am;
TextView rootName;
Context context;
Dialog dialog;
String key1, schoolId;
public void showDialogAddRoute(Activity activity, final String packageName){
    context=activity;
    dialog = new Dialog(context);

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.dialog_update);
    am = (ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);

    Button cancelDialogue=(Button)dialog.findViewById(R.id.buttonUpdate);
    Log.i("nom de package",packageName);
    cancelDialogue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(Intent.ACTION_VIEW);                
    intent.setData(Uri.parse("https://play.google.com/store/apps/details?
    id="+packageName+"&hl=en"));
            context.startActivity(intent);
        }
    });
    dialog.show();
}
}

mise en page de la boîte de dialogue

3voto

amin Points 450

Vous pouvez utiliser la bibliothèque Play Core Library In-app updates pour résoudre ce problème. Vous pouvez vérifier la disponibilité des mises à jour et les installer si elles sont disponibles de manière transparente.

Les mises à jour in-app ne sont pas compatibles avec les applications qui utilisent des fichiers d'extension APK (.obb). Vous pouvez opter pour des téléchargements flexibles ou des mises à jour immédiates que Google Play se charge de télécharger et d'installer pour vous.

dependencies {
    implementation 'com.google.android.play:core:1.5.0'
    ...
}

Référez-vous à cette réponse https://stackoverflow.com/a/58212818/7579041

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X