J'essaie de stocker des données de manière permanente sur Cordova pour Android et iOS. Par définitivement, je veux dire si même l'utilisateur désinstalle l'application mobile, elle y reste, donc s'il l'installe à nouveau, je pourrai la réutiliser. / cordova-plugin-secure-storage qui utilise keychain
sur iOS et SharedPreferences
sur Android.
L'iOS fonctionne comme prévu, je peut supprimer et installer l'application et voir que mes données sont toujours là.
Dans Android, les données sont effacées dès que je désinstalle. (l'appareil Android est sécurisé, ce qui signifie qu'il a un écran de verrouillage et je peux confirmer qu'il écrit dans SharedPreferences en le regardant avec stetho
)
Je pensais qu'il est supprimé car la valeur par défaut de allowbackup peut être false, mais même lorsque je l'ai transformée en True, cela ne fonctionne toujours pas.
<platform name="android"> <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:allowBackup="true" /> </edit-config> </platform>
J'apprécierai votre aide à l'avance ...
(J'ai ajouté une balise Android car il se peut que certains développeurs Android connaissent la raison de SharedPreference données supprimées ...)
3 Réponses :
lorsque vous avez désinstallé l'application, les données de SharedPreference ont également été supprimées, car elles appartiennent à cette application, pour garantir que d'autres applications peuvent obtenir vos données lorsque vous définissez le mode est privé. si vous voulez des données, l'état de stockage ignore si votre application est désinstallée, vous devez écrire un fichier sur la carte SD ou le répertoire de stockage externe. mais il ne sera disponible que jusqu'à android-Q.
Pour de petites quantités de données clé / valeur (par exemple, les paramètres de l'application), vous pouvez utiliser cordova -plugin-cloud-settings .
Installez-le dans votre projet:
cordova.plugin.cloudsettings.load(function(settings){ console.log("Successfully loaded settings"); console.dir(settings); });
Enregistrez des données et elles seront sauvegardées dans le stockage cloud de la plateforme.
cordova.plugin.cloudsettings.save({ user: { id: 1678, name: 'Fred', preferences: { mute: true, locale: 'en_GB' } } });
Vous pouvez ensuite charger les données même après la réinstallation de l'application:
cordova plugin add cordova-plugin-cloud-settings --variable ANDROID_BACKUP_SERVICE_KEY="<API_KEY>"
Dans mon cas, j'ai utilisé le plugin cordova-custom-config
<platform name="android"> ... <custom-preference name="android-manifest/application/@android:allowBackup" value="true" /> ... </platform>
et le problème a été résolu.
Dans le config.xml pour agréger
cordova plugin add cordova-custom-config
voir plus de détails sur le plugin dans un exemple dans cordova-custom-config-example a >
et la documentation d'andoid dans le guide a>