npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cordova-plugin-nativestorage

v2.3.2

Published

Native storage of variables in Android, iOS and Windows

Downloads

47,743

Readme

Cordova plugin NativeStorage

npm version Build Status Known Vulnerabilities

NPM

Join the chat for questions and updates Join the chat at https://gitter.im/TheCocoaProject/cordova-plugin-nativestorage


Cite this plugin:

@misc{callebautNS,
author =   {Gilles Callebaut and Alok Rajiv},
title =    {{NativeStorage - A Cordova Plugin}},
howpublished = {\url{https://github.com/TheCocoaProject/cordova-plugin-nativestorage}},
}

You can also provide a version field to include a version number e.g., version = {2.3.1}.


:) As per npm-stat we just crossed 150k downloads!! Thanks to everyone who helped and to everyone who have send in their kind words!

NEW: Windows and OS X is supported! UPDATE: The Plugin can now also be found at the Telerik Plugin Market.

Documentation about the API prior to v2 can be found at the wiki


The plugin was created and developed by Gilles Callebaut, in the scope of an IWT/VlAIO Tetra project CrossMoS which assesses Mobile Cross-Platform Tools. This wouldn't be possible without the contributions of Alok Rajiv, our Cordova and JavaScript guru.

Please consider reading our wiki for more documentation about this plugin.

Contents

Why?

This plugin is created because of the non-persistent property of LocalStorage in the WebView of Android and iOS. In iOS stored data from LocalStorage can be removed by the OS, when running out of memory.

Some complaints:

  • http://gonehybrid.com/dont-assume-localstorage-will-always-work-in-your-hybrid-app/
  • http://stackoverflow.com/questions/7750857/how-permanent-is-local-storage-on-android-and-ios
  • http://stackoverflow.com/questions/25627991/ios-7-webview-and-localstorage-persistence-update
  • http://stackoverflow.com/questions/28082624/localstorage-persistence-in-ios-android-webview
  • https://forum.ionicframework.com/t/localstorage-is-it-cleared-after-app-restarts-periodically-in-ios/21819
  • https://bugs.chromium.org/p/chromium/issues/detail?id=481380
  • From Cordova itself: http://cordova.apache.org/docs/en/latest/cordova/storage/storage.html

When to use the plugin

  • Simple: Uniform and convenient way of organizing, storing, and accessing the data
  • Fast: Less than 1 milisecond to save or retrieve an object (in general)
  • Persistence: Save data over multiple sessions, i.e. holds the data till the application is removed from the device
  • Small data: Store small amounts of persistent data (less than a few hundred kilobytes)
    • It is possible to store more than a few megabytes, but that's not the intended usage of the plugin.
    • See issue #31 for a more 'in-depth' explanation of size limit.

Examples

Storage of:

  • User preferences
  • Game progress
  • Text
  • ...

When not to use the plugin

  • Storing and retrieving files can be done by means of the file plugin
  • For storing many objects please consider trying a database-based strategy, for instance: WebSQL and SQLite plugin.

Scientific Articles

Assessment of Data Storage Strategies Using the Mobile Cross-Platform Tool Cordova

Installation

The plugin can be installed via the Cordova command line interface:

  • Navigate to the root folder for your Cordova/Phonegap/Ionic project.
  • Run the command:
cordova plugin add cordova-plugin-nativestorage

or through this git repo if you want to be running the development version:

cordova plugin add https://github.com/TheCocoaProject/cordova-plugin-nativestorage

If you're using ngCordova you can use the ngCordova-wrapper:

bower install git://github.com/TheCocoaProject/ngcordova-wrapper-nativestorage --save-dev

For more information about the usage of the plugin check the repo for the ngCordova-wrapper - Ionic V1. The plugin is also supported for Ionic, please check the official Ionic documentation for the installation procedure and use.

Reinstalling/installing developer version

Remove the plugin from the current project:

cordova plugin remove cordova-plugin-nativestorage

Install the developer version from Github:

cordova plugin add https://github.com/TheCocoaProject/cordova-plugin-nativestorage

Supported platforms

  • Android
  • iOS
  • Browser (for testing purposes)
  • Windows (thanks to Christian Helbig see PR)
  • OS X (thanks to Javier Ribó see PR)

Supported frameworks

Usage

The parameter of the success-callback function will be the saved or retrieved value, the error-callback will specify the occurred error.

Supported data types

As of version v2.0 all data types that can be stringified can be stored with the setItem and getItem method, see storing values. A more fine grained storage method is also provided. These methods can be used to store type-specific data types, see API prior to v2.

Storing values

NativeStorage.setItem("reference_to_value",<value>, <success-callback>, <error-callback>);

Retrieving values

NativeStorage.getItem("reference_to_value",<success-callback>, <error-callback>);

Retrieving all keys

NativeStorage.keys(<success-callback>, <error-callback>);

Removing values

Removing a single variable:

NativeStorage.remove("reference_to_value",<success-callback>, <error-callback>);

Removing all stored variables:

NativeStorage.clear(<success-callback>, <error-callback>);

iOS specific features

  • App Groups (share data between apps) First the suite name must be provided before accessing and retrieving data.
NativeStorage.initWithSuiteName("suitename");

Example

var app = {
    initialize: function () {
        this.bindEvents();
    },
    bindEvents: function () {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function () {
        var obj = {name: "NativeStorage", author: "GillesCallebaut"};

        // be certain to make an unique reference String for each variable!
        NativeStorage.setItem("reference", obj, this.setSuccess, this.setError);
    },
    setSuccess: function (obj) {
        console.log(obj.name);
        NativeStorage.getItem("reference", this.getSuccess, this.getError);
    },
    setError: function (error) {
        console.log(error.code);
        if (error.exception !== "") console.log(error.exception);
    },
    getSuccess: function (obj) {
        console.log(obj.name);
        NativeStorage.remove("reference", this.removeSuccess, this.removeError);
    },
    getError: function (error) {
        console.log(error.code);
        if (error.exception !== "") console.log(error.exception);
    },
    removeSuccess: function () {
        console.log("Removed");
    },
    removeError: function (error) {
        console.log(error.code);
        if (error.exception !== "") console.log(error.exception);
    }
};

app.initialize();

ngCordova (Ionic V1) example

var app = angular.module('starter.controllers', ['ngCordova.plugins.nativeStorage'])

app.controller('myCtrl', function ($ionicPlatform, $scope, $cordovaNativeStorage, $log) {
    $ionicPlatform.ready(function () {
        $scope.$apply(function () {
            $cordovaNativeStorage.setItem("ref", "value").then(function (value) {
                $log.log(value);
                $cordovaNativeStorage.getItem("ref").then(function (value) {
                    $log.log(value);
                }, function (error) {
                    $log.log(error);
                });
            }, function (error) {
                $log.log(error);
            });
        });
    });
});

Demo Example

A demo application can be found at cordova-plugin-nativestorage/examples/demo. This application will save a String when the SAVE (btn_load) is pushed. This String is the value which has been typed in the input field (data_input). When the LOAD button is pressed, the value is shown by means of an alert message.

Installation

  • Cloning the repo to a local dir
git clone https://github.com/GillesC/cordova-plugin-nativestorage.git
  • Navigating to the demo dir
cd cordova-plugin-nativestorage/examples/demo/
  • Adding target platforms
cordova platform add ios
cordova platform add android
cordova platform add browser
cordova platform add windows
  • Adding the plugin
cordova plugin add cordova-plugin-nativestorage
  • For testing the plugin
cordova plugin add http://git-wip-us.apache.org/repos/asf/cordova-plugin-test-framework.git
cordova plugin add https://github.com/TheCocoaProject/cordova-plugin-nativestorage.git#:/tests
  • Run or emulate the demo application
cordova emulate ios
cordova run android
cordova run browser
cordova run windows

Security

Is it safe to store sensitive data via this plugin?

  • Yes and No, all stored values are only accessible by your application, which makes it safe. However, the values can be viewed when the attacker has access to your phone's password (e.g. lock-pattern) through an un-encrypted back-up on Android (if back-up is enabled) or through root-access. The latter is only possible if the phone is rooted. An extra encryption mechanism would be of value when an extra user-supplied password is used. This mode is on our Future Track list.

Errors

Error object contains:

  • code
  • source (= "Native"/"JS")
  • exception (if any, e.g. JSON exception)

Error codes

the code contains an integer whichs specifies the occurred error/problem

  • NATIVE_WRITE_FAILED = 1
  • ITEM_NOT_FOUND = 2
  • NULL_REFERENCE = 3
  • UNDEFINED_TYPE = 4
  • JSON_ERROR = 5
  • WRONG_PARAMETER = 6

Problems

If you encounter any problems, please remove the current plugin and re-add it. This will install the latest version.

If you have code issues, things not related to a bug of the plugin please consider posting your question on Stackoverflow. And add our own tag, cordova-nativestorage.

  • Be certain to only retrieve a saved value when the put/set success-callback method was invoked.
  • When using Ionic V1 the plugin can be undefined, the solution was descibed in issue #10:
    • Remove ng-app from body
    • put this code at the end of index.html:
    • <script type="text/javascript"> document.addEventListener('deviceready', function onDeviceReady() { angular.bootstrap(document.querySelector('body'), ['starter']); }, false); </script>
  • Unknown provider: $cordovaNativeStorageProvider
    • Are you certain you've included the wrapper?
  • Failed to instantiate module ngCordova.plugins.nativeStorage
  • Module 'ngCordova.plugins.nativeStorage' is not available
    • Check your bower json file (bower.json) to see if everything is correct
    • be certain that the wrappers js file is included as described in the README of the wrapper
  • Plugin doesn't seem to work in iOS 10
    • Solution is presented on Stackoverflow in this thread. The issue was also discussed in issue #36.

F.A.Q.

  • Is data persistent between app updates?
    • Yes. The data should persistent till the app has been deleted from the device. This because the plugin uses Sharedpreferences in Android and NSUserDefaults in iOS.
  • Oh no my stored data is not cleared after reinstalling my application. How do I resolve this 'issue'?
  • What database are you using and why?
    • None. The plugin uses Sharedpreferences in Android and NSUserDefaults in iOS. These strategies are designed for storing data quick and easy. See the usage of the plugin for more info about DB vs NativeStorage.
  • Is it possible to save images and audio with the plugin?
    • Yes. If you could stringify the data. Should I save imaged and audio is a different question. If the provided data isn't large and there isn't need to store a large amount of it, it will be OK. See the usage of the plugin for more info about storing large data with the plugin.
  • Is there a forum where people interested in the plugin could discuss issues like this?
  • Can I access the saved value in Android?
  • Can I access saved values in JavaScript?
  • Does this plugin supports Cordova 3.9.2?

Applications using this plugin

If you're utilizing this plugin and wish to add your application to this readme, please contact me.