[BREAKGLASS] Use SharedPreference (Android) and UserDefaults (iOS) with React Native over a unified interface
This library is very useful for tvOS, since it doesn't support persistent storage, except for UserDefaults. I've checked and it works completely fine with my project. So, the only thing necessary is to add tvOS to platforms. |
||
|---|---|---|
| android | ||
| ios | ||
| .gitignore | ||
| index.js | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
| RNDefaultPreference.podspec | ||
react-native-default-preference
Use SharedPreferences (Android) and UserDefaults (iOS) with React Native over a unified interface.
All data is stored as a string. If you need to support more complex data structures (e.g. JSON), use serialization/deserialization.
Getting started
$ npm install react-native-default-preference --save
React Native >= 0.60
$ cd ios && pod install
React Native <= 0.59
$ react-native link react-native-default-preference
Manual installation
iOS
- In XCode, in the project navigator, right click
Libraries➜Add Files to [your project's name] - Go to
node_modules➜react-native-default-preferenceand addRNDefaultPreference.xcodeproj - In XCode, in the project navigator, select your project. Add
libRNDefaultPreference.ato your project'sBuild Phases➜Link Binary With Libraries - Run your project (
Cmd+R)<
Android
- Open up
android/app/src/main/java/[...]/MainApplication.java
- Add
import com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage;to the imports at the top of the file - Add
new RNDefaultPreferencePackage()to the list returned by thegetPackages()method
- Append the following lines to
android/settings.gradle:include ':react-native-default-preference' project(':react-native-default-preference').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-default-preference/android') - Insert the following lines inside the dependencies block in
android/app/build.gradle:compile project(':react-native-default-preference')
Usage
import DefaultPreference from 'react-native-default-preference';
DefaultPreference.get('my key').then(function(value) {console.log(value)});
DefaultPreference.set('my key', 'my value').then(function() {console.log('done')});
API
function get(key:String):Promise<String>;
function set(key:String, value:String):Promise<Void>;
function clear(key:String):Promise<Void>;
function getMultiple(keys:Array<String>):Promise<Array<String>>;
function setMultiple(data:Object):Promise<Void>;
function clearMultiple(keys:Array<String>):Promise<Void>;
function getAll():Promise<Object>;
function clearAll():Promise<Void>;
/** Gets and sets the current preferences file name (android) or user default suite name (ios) **/
function getName():Promise<String>;
function setName(name:String):Promise<Void>;
Cordova Native Storage Compatibility
This module is compatible with cordova-plugin-native-storage.
Android
You need to use the same SharedPreference as in the cordova plugin, to do so add the following line:
import { Platform } from 'react-native';
// ...
if (Platform.OS === 'android') DefaultPreference.setName('NativeStorage');
iOS
You don't need to change the name, as cordova-plugin-native-storage uses the default value.