Détecter si une nouvelle installation ou mise à jour de la version (application Android)
J'ai une appli sur le Play Store. Je veux mettre une condition que si les utilisateurs souhaitent utiliser une certaine partie de l'application, ils ont pour inviter un ami avant d'être en mesure de le faire. Mais je ne veux imposer cette restriction pour les nouvelles installations de l'application (pour être juste, pour les utilisateurs qui ont installé l'application avant de la restriction).
Désolé pour la longue intro, ma question est comment puis-je savoir si le périphérique actuel a mis à jour l'app ou d'une nouvelle installation?
- Est-ce que votre appli de communiquer avec un backend? Avez-vous un moyen d'identification des utilisateurs à l'extérieur de l'appareil lui-même?
- Vérifier si l'ancienne version de votre application enregistre certaines données sur le disque ou des préférences, c'est sûr (c'est à dire qui ne peuvent pas être supprimés par l'utilisateur). Lorsque la nouvelle version est fraîchement installé, ces données ne sont pas exister. Si la nouvelle version est une mise à jour de l'ancienne version, ces données existent.
- Je voudrais insister à la caisse de préférence de données de la version existante.
- Cela semble assez bon, non pas une solution parfaite, car il ya encore une chance que les anciennes versions n'ont rien à SharedPrefereces. Si il n'y a pas une meilleure solution, je vais devoir utiliser que si.
- Autant que je sache, votre exigence est unique, et est donc la solution. Afin d'identifier les utilisateurs, vous avez besoin pour l'extraction de leurs empreintes dans l'appareil. et comme vous le savez, SharedPreference est l'une des façons car il persiste pendant la mise à jour. J'espère que vous voyez ce que je veux dire.
- Comme vous l'avez ajouté un commentaire avant moi, Merci de poster votre suggestion, comme réponse, de sorte qu'il peut être accepté par l'OP si il le souhaite.
- oui, je pense que vous avez raison, c'est trop mauvais, il n'y a pas une solution à toute épreuve, mais cela semble logique. Merci les gars
- Ravi de vous aider.
- J'ai ajouté mon commentaire en réponse, thx @mehul-joisar 😉
- Veuillez vérifier ma réponse, il ne dépend avant tout du comportement de votre application.
- Cela ne marchera pas, parce que je ne veux pas commencer à détecter qui sont nouveaux à partir de maintenant, je veux être en mesure de dire que ce dispositif a eu d'une précédente version de mon application, donc, je vais le faire. Désolé si c'est pas clair, lisez les commentaires sur vos réponses si cela ne fait pas de sens.
Vous devez vous connecter pour publier un commentaire.
Vérifier si l'ancienne version de votre application enregistre certaines données sur le disque ou préférences. Ces données doivent être sûrs, c'est à dire qu'il ne peut pas être supprimé par l'utilisateur (je ne suis pas sûr que c'est possible).
Lorsque la nouvelle version est fraîchement installé, ces données ne sont pas exister. Si la nouvelle version est une mise à jour de l'ancienne version, ces données existent.
Pire des cas, un ancien utilisateur sera signalé comme un nouveau et ont un usage restreint.
La seule solution que je vois ce n'est pas une entité à l'extérieur de l'appareil pour obtenir le
PackageInfo
pour votre application et vérifier les valeurs deversionCode
firstInstallTime
lastUpdateTime
Lors de la première installation,
firstInstallTime
etlastUpdateTime
aura la même valeur (au moins sur mon appareil, ils étaient les mêmes); après une mise à jour, les valeurs seront différentes carlastUpdateTime
va changer. En outre, vous savez à peu près la date et l'heure de créer la version qui introduit ce nouveau comportement, et vous savez aussi quelle version de code, il va avoir.Je voudrais étendre
Application
et de mettre en œuvre cette vérification dansonCreate()
, et stocker le résultat dansSharedPreferences
:Ce n'est pas infaillible, il ya des façons de contourner cela, si l'utilisateur vraiment veut, mais je pense que c'est à peu près aussi bon qu'il obtient. Si vous souhaitez suivre ces choses mieux et éviter la manipulation par l'utilisateur, vous devez commencer à stocker des informations de l'utilisateur sur un serveur (en supposant que vous avez toute sorte de backend).
Ma solution est d'utiliser SahredPreference
retour 3 posibles valeurs:
Mise à jour
(merci pour les commentaires ci-dessous ma réponse pour les pousser pour les plus spécifiques/réponse complète).
Parce que vous ne pouvez pas vraiment rétroactivement modifier le code pour les versions précédentes de votre application, je pense que le plus simple est de permettre à tous les actuel installe à être protégés dans.
Afin de garder une trace de qui, d'une façon serait de trouver un morceau de l'information qui pointe vers une version spécifique de votre application. Être qu'un fichier horodaté, ou un
SharedPreferences
, ou même laversionCode
(comme suggéré par @DaudArfin dans sa réponse) à partir de la dernière version de l'application que vous souhaitez autoriser les utilisateurs à pas cette restriction. Ensuite, vous avez besoin de changer cela. Que le changement devient alors le point de référence pour toutes les précédentes installations. Pour les utilisateurs de marquer leur"has_shared"
drapeau de vrai. Ils deviennent de droits acquis dans. Ensuite, aller de l'avant, vous pouvez définir la"has_shared"
par défaut pourtrue
(Original, réponse partielle ci-dessous)
Utiliser un SharedPrefence (ou similaire)
Utiliser quelque chose comme
SharedPreferences
.De cette façon, vous pouvez mettre une valeur simple comme
has_shared = true
etSharedPreferences
persistera l'application des mises à jour.Quelque chose de ce genre quand ils ont signé quelqu'un /partagé votre application
Ensuite, vous pouvez uniquement des corrections de personnes lors de la pref retourne true
Docs pour SharedPreference:
http://developer.android.com/training/basics/data-storage/shared-preferences.html
straight forward
façon.Vous pouvez obtenir le code de version et le nom de la version de l'aide ci-dessous extrait de code
Maintenant, vous pouvez vérifier la version la plus récente et de restreindre selon votre condition.
Nous pouvons utiliser la diffusion de récepteur pour écouter mise à jour app.
Récepteur
Manifeste
Il ne fonctionne pas de débogage. Donc, vous devez installer manuellement.
Entrant la commande suivante dans le Terminal de l'onglet au bas de Android Studio: