Я использую Ionic для создания приложений для iOS и Android.Я хочу сохранить пользовательскую запись после первого входа пользователя в систему, чтобы ему не приходилось снова входить в систему после закрытия приложения.Таким образом, когда приложение запускается, оно проверяет, вошли ли они в систему, если в таблице есть запись пользователя.Если вы не вошли в систему (при первом запуске приложения или позже нажмите «Выйти»), он должен перейти на страницу входа.
В app.component.ts
this.platform.ready().then(() => {
this.registerBackButton();
this.statusBar.styleDefault();
this.sqlStorageService.initializeDatabase().then(()=> {
this.sqlStorageService.isLoggedIn().then(loggedIn => {
this.loader.dismiss();
this.splashScreen.hide();
if (loggedIn){
this.rootPage = HomePage;
}else{
this.rootPage = LoginPage;
}
});
});
В sqlStorageService :
initializeDatabase()
{
return this.sqlite.create({name: 'data.db', location: 'default' }).then(db => {
this.db = db;
return this.db.executeSql('CREATE TABLE IF NOT EXISTS CurrentUser(userName text primary key, firstName text, lastName text, bearerToken text, claims text)', [])
.then(data => {console.log("initialize database complete")})
})
}
isLoggedIn():Promise<boolean>{
return this.get().then(data => {
return data != null;
})
}
get() : Promise<IAppUserAuthorization> | null{
return this.db.executeSql('SELECT userName, firstName, lastName, bearerToken, claims FROM CurrentUser', [])
.then(data => {
if (data.rows.length == 0){
return null;
}
let user: IAppUserAuthorization =
{
userName: data.rows.item(0).userName,
firstName: data.rows.item(0).firstName,
lastName: data.rows.item(0).lastName,
bearerToken: data.rows.item(0).bearerToken,
isAuthenticated: data.rows.item(0).isAuthenticated,
claims: JSON.parse(data.rows.item(0).claims)
}
return user;
})
}
После того, как пользователь authenticated
return this.db.executeSql('insert or replace into CurrentUser(userName, firstName, lastName, bearerToken, claims) values(?, ?, ? , ?, ?)',
[appUser.userName, appUser.firstName, appUser.lastName, appUser.bearerToken, JSON.stringify(appUser.claims)])
.then(data => {
return JSON.parse(data.rows.item(0).value);
});
Все это прекрасно работает, когда я развертываюсь на устройстве Android.Я вхожу в первый раз.Затем закройте приложение ... затем снова откройте приложение, и я попаду на домашнюю страницу.
При развертывании на любом устройстве iOS я вхожу в первый раз.затем закройте приложение .. затем снова откройте приложение, и я попаду на страницу входа.
Хочу отметить, что после того, как я вошел в систему на устройстве iOS, и я прошел аутентификацию.Запись хранится в базе данных, и я могу получить доступ к данным в таблице из любой другой части кода, и она работает как положено.Это не работает, только когда я закрываю приложение и снова открываю его.Кажется, что я не могу найти базу данных (или не найти данные в этой таблице)
Я бьюсь головой об этом уже 3 дня.Я уверен, что это что-то очень тонкое, я скучаю, но я не понимаю, почему это работает безупречно для Android, а не iOS