我建議編寫自定義插件,並妥善保存在Objective-C的用戶默認設置。
LocalStorage不是永久性存儲,而WebSQL似乎用來存儲設置過大。
你不必太參與Objective-C和有良好的PhoneGap /科爾多瓦插件指南:
http://docs.phonegap.com/en/3.3.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide
我使用此代碼來存儲「FirstRun」變量來檢查該應用程序是一個新的安裝。該插件會檢查應用程序是否已經運行過,並返回1或0,該值將被解析爲一個整數並評估爲true/false。
您可以更新此代碼並將更多方法添加到「AppChecks」類中。我把所有簡單的檢查和設置存儲在這個類。
AppChecks.h
#import <Cordova/CDVPlugin.h>
@interface AppChecks : CDVPlugin
- (void) checkFirstRun:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
AppChecks.m
#import "AppChecks.h"
#import <Cordova/CDVPluginResult.h>
@implementation AppChecks
- (void) checkFirstRun:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options {
NSString* callbackId = [arguments objectAtIndex:0];
CDVPluginResult* pluginResult = nil;
NSString* javaScript = nil;
@try {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *isFirstRun = @"1";
if (![defaults objectForKey:@"firstRun"]) {
[defaults setObject:[NSDate date] forKey:@"firstRun"];
} else {
isFirstRun = @"0";
}
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:isFirstRun];
javaScript = [pluginResult toSuccessCallbackString:callbackId];
} @catch (NSException* exception) {
// could not get locale
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_JSON_EXCEPTION messageAsString:[exception reason]];
javaScript = [pluginResult toErrorCallbackString:callbackId];
}
[self writeJavascript:javaScript];
}
@end
用在我的Javascript代碼:
cordova.exec(
function(isFirstRun) {
isFirstRun = parseInt(isFirstRun);
if(isFirstRun) {
// do stuff for first run
}
},
function(err) {
// handle error from plugin
},
"AppChecks",
"checkFirstRun",
[]
);
你是對的; LocalStorage不是永久性存儲。即使我不想爲此應用程序使用Objective-C,我也會嘗試您的示例。 – numediaweb
對不起,我應該更新我的答案,所以插件是用Java編寫的,我只是將它作爲Objective-C插件實現,但它可以轉換爲Java/Android。 Javascript部分將保持不變 –
我的經驗僅適用於Cordova 2.x和Android,但localStorage _was_在重新啓動之間持續存在(雖然不在重新安裝之間)。 – rachel