NativeScript Secure Storage plugin
Installation
From the command prompt go to your app's root folder and execute:
tns plugin add nativescript-secure-storage
Demo app
Want to dive in quickly? Check out the demo! Otherwise, continue reading.
You can run the demo app from the root of the project by typing npm run demo.ios.device
.

PRO TIP: Want to store objects instead of strings? Use JSON.stringify
with set
and JSON.parse
with get
.
API
set
| setSync
"In order to GET something you first need to SET it."
-- Eddy Verbruggen
JavaScript
// require the pluginvar SecureStorage = SecureStorage; // instantiate the pluginvar secureStorage = ; // asyncsecureStorage; // syncvar success = secureStorage;
TypeScript
// require the plugin; // instantiate the plugin; // asyncsecureStorage.set.thenconsole.log"Successfully set a value? " + success; // sync;
get
| getSync
Will return null
if not found.
JavaScript
// asyncsecureStorage; // syncvar value = secureStorage;
TypeScript
// asyncsecureStorage.get.thenconsole.log"Got value: " + value; // sync;
remove
| removeSync
JavaScript
// asyncsecureStorage; // syncvar success = secureStorage;
TypeScript
// asyncsecureStorage.remove.thenconsole.log"Successfully removed a value? " + success; // sync;
removeAll
| removeAllSync
JavaScript
// asyncsecureStorage; // syncvar success = secureStorage;
TypeScript
// asyncsecureStorage.removeAll.thenconsole.log"Successfully removed a value? " + success; // sync;
clearAllOnFirstRun
| clearAllOnFirstRunSync
These functions can be used if you want to clear data when your app is reinstalled.
This is only really useful on iOS because if you write something (through this plugin) to the Keychain, this data won't be removed when the app is uninstalled. So the next time the same app is installed, it will find the data in the keychain.
So if you want to clear 'lingering' data from a previous install, make sure you run one of these methods before using other methods this plugin provides.
JavaScript
// asyncsecureStorage; // syncvar success = secureStorage;
TypeScript
// asyncsecureStorage.clearAllOnFirstRun.then; // sync;
isFirstRun
| isFirstRunSync
As a bonus, you can piggyback the 'first run' mechanism to do anything you want when the plugin detects this is the first run (after an install or install-delete-reinstall).
TypeScript
// syncif secureStorage.isFirstRunSync // asyncsecureStorage.isFirstRun.then;
Usage with Angular
In your view:
In your @Component
:
;
iOS Security++
By default the plugin uses kSecAttrAccessibleAlwaysThisDeviceOnly
access control to the keychain. This means that the keychain value can be accessed even if the device is locked. If you want to enhance security and you do not need background access, or if you want to allow the value to be backed up and migrated to another device, you can use any of keys defined here and pass it when you create an instance of SecureStorage
, for example
declare ; // This is needed in case you don't have tns-platform-declarations module installed. ;
iOS Simulator
Currently this plugin defaults to using NSUserDefaults
on iOS Simulators. You can change this behaviour by providing disableFallbackToUserDefaults
to the constructor of SecureStorage
. This then uses the keychain instead of NSUserDefaults
on simulators.
If you're running into issues similar to issue_10, consider using the default behaviour again.
Credits
- On iOS we're leveraging the KeyChain using the SAMKeychain library (on the Simulator
NSUserDefaults
), - On Android we're using Hawk library which internally uses Facebook conceal.
- Thanks, Prabu Devarrajan for adding the
deleteAll
function!