Я новичок в NativeScript и Angular, поэтому я ценю любую помощь / руководство. Я использую Angular 8.2.14 и nativescript 6.2.2.
Я работаю над приложением для iOS и Android, которое, по сути, предоставляет список задач и некоторые другие основные сведения c. как только пользователь входит в систему.
Когда приложение запускается, пользователю предоставляется компонент входа. После аутентификации пользователя имя пользователя, токен и метка времени истечения сохраняются с помощью плагина nativescript-secure-storage . Я сохраняю имя пользователя и токен, чтобы в следующий раз, когда пользователь запустил приложение, ему не нужно было снова входить в систему.
Затем пользователь перенаправляется на панель мониторинга через this.router.navigateByUrl("/dashboard");
.
Я следовал примеру в документации по nativescript, чтобы заменить кнопку навигации «назад» на панели действий на приборной панели кнопкой «Выйти», которая вызывает функцию. Это прекрасно работает в iOS. Пользователь нажимает на кнопку выхода, и я очищаю имя пользователя и токен, которые хранятся в безопасном хранилище.
Проблема в том, что в Android у пользователя есть кнопка "Назад", а тег <actionItem>
фактически не отображается на панели действий.
Суть элемента LoginComponent:
export class LoginComponent implements OnInit {
secureStorage = new SecureStorage();
constructor(private router: Router, private userService: UserService) {
this.user = new User();
}
ngOnInit() {
// Check to see if user has a saved session
var sessionUser = this.userService.checkSavedSession();
if (sessionUser.expires > now) {
this.router.navigateByUrl("/dashboard");
}
}
login() {
// Called when user taps submit on login view
this.userService.login(this.user)
.subscribe(
// If user authed store the session
this.secureStorage.set({
key: "appSession",
value: JSON.stringify({
uid: resp.uid,
expires: resp.exp,
token: resp.token
})
});
// Go to the dashboard
this.router.navigateByUrl("/dashboard");
);
}
}
Представление панели мониторинга:
<ActionBar title="Dashboard" class="action-bar">
<navigationButton text="Log Out" ios:visibility="collapsed" (tap)="logout()"></navigationButton>
<actionItem text="Log Out" android:visibility="collapsed" (tap)="logout()"></actionItem>
</ActionBar>
<AbsoluteLayout><!-- View content --></AbsoluteLayout>
Компонент панели мониторинга содержит функцию выхода из системы, которая очищает безопасное хранилище и возвращает пользователя для входа в систему.
logout() {
this.secureStorage.removeAll().then(success => console.log("Cleared storage");
this.location.back();
}
Я попытался возиться с подпиской на события навигации и события местоположения, чтобы посмотреть, смогу ли я обнаружить, что пользователь нажал кнопку "Назад", когда находился на панели инструментов. Я могу обнаружить, что это происходит, но я также хотел бы уведомить пользователя о том, что он собирается выйти из системы, и дать ему возможность изменить свое мнение, поскольку он фактически не нажимал кнопку выхода из системы. Я не могу понять эту часть.
Любая помощь будет принята с благодарностью.