Обработка выхода в nativescript с помощью angular на android и iOS - PullRequest
0 голосов
/ 04 февраля 2020

Я новичок в 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();
}

Я попытался возиться с подпиской на события навигации и события местоположения, чтобы посмотреть, смогу ли я обнаружить, что пользователь нажал кнопку "Назад", когда находился на панели инструментов. Я могу обнаружить, что это происходит, но я также хотел бы уведомить пользователя о том, что он собирается выйти из системы, и дать ему возможность изменить свое мнение, поскольку он фактически не нажимал кнопку выхода из системы. Я не могу понять эту часть.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 04 февраля 2020

При переходе от логина к приборной панели вы можете очистить свою историю. Если вы это сделаете, нажатие кнопки «назад» закроет приложение вместо того, чтобы вернуть пользователя для входа в систему.

Также вы должны использовать RouterExtensions вместо Angular 'Router.

this.routerExtensions.navigateByUrl("/dashboard", {clearHistory: true});

Вы также можете прослушать событие кнопки назад (activityBackPressed), при необходимости переопределить поведение по умолчанию. Подробнее на Application Lifecycle документы.

Примечание: Я предполагаю, что вы не захотите выйти из системы с помощью кнопки "Назад", если хотите, то вы можете лучше хранить токен в переменной, чем использовать безопасное хранилище. Безопасное хранилище обычно используется для входа пользователя в систему даже после перезапуска приложения.

...