Я использую Ionic 3 в одном из своих проектов с системой аутентификации. Я использую собственное хранилище, когда пользователь хочет подключиться. Он работает на Android, но на iOS перенаправляет меня на экран входа в систему даже с помощью platform.ready (). Я видел, что у нескольких людей была похожая проблема, но не было ответа, поэтому я хотел знать, сталкивался ли кто-то с такой же проблемой и нашел ли он решение. Вот мой код:
this.plt.ready().then(() => {
this.nativeStorage.setItem('userStorage', { stayConnected: (typeof this.stayConnected == "undefined" || this.stayConnected == false ? '' : 'stayConnected'), userId: (result as any).id, userLogin: (result as any).login })
.then(
() => {
this.loader.dismiss();
this.navCtrl.setRoot(HomePage);
},
error => {
this.loader.dismiss();
this.presentToast(this.languageLogin.error, 3000, "bottom");
}
)
},
error => {
this.loader.dismiss();
this.presentToast(this.languageLogin.error, 3000, "bottom");
});
Спасибо за ответ.





Да, у меня возникли проблемы при использовании плагинов собственного хранилища ionic. Поэтому я обратился к свойству javascript Window localStorage, и он работает полностью нормально.
Синтаксис для СОХРАНЕНИЯ данных в localStorage:
localStorage.setItem("key", "success");
Синтаксис ЧТЕНИЯ данных из localStorage:
var lastname = localStorage.getItem("key");
Синтаксис для УДАЛЕНИЯ данных из localStorage:
localStorage.removeItem("key");
и теперь вы можете написать свой код с этим свойством, например:
if (lastname == "success"){
this.navCtrl.setRoot(HomePage);
} else{
alert("Not matched")
}
Я бы поместил 2 функции storeUser () и getUser () в один и тот же поставщик UserService, как показано ниже. Затем добавьте UserService в конструктор любых необходимых страниц. Работает как на IOS, так и на Android, и в Интернете.
import {Storage} from '@ionic/storage';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class UserService {
constructor(private storage: Storage){}
public storeUser(userData): void {
this.storage.set('userData', userData);
}
public getUser(): Observable<any>
return Observable.fromPromise(this.storage.get('userData').then((val) => {
return !!val;
}));
}
Вы находитесь внутри platform.ready(), и это хорошо. В пакете хранилища также есть .ready(), который вы, возможно, захотите использовать, который специально проверяет, готово ли само хранилище. Если это запускается при запуске, есть большая вероятность, что хранилище инициализируется.
Кроме того, это начинает превращаться в сумасшедшую путаницу в цепочке обещаний. Я бы посоветовал погрузиться в async / await. Что-то вроде (непроверенного) кода ниже.
try{
await this.plt.ready();
await this.nativeStorage.ready();
let stayConnectedValue = (this.stayConnected) ? 'stayConnected' : '';
await this.nativeStorage.setItem('userStorage', { stayConnected: stayConnectedValue , userId: (result as any).id, userLogin: (result as any).login });
this.navCtrl.setRoot(HomePage);
}
catch(err){
this.presentToast(this.languageLogin.error, 3000, "bottom");
}
finally{
this.loader.dismiss();
}
Спасибо за ответ, теперь я устанавливаю флажок, потому что я привык проверять информацию в кеше.