Я использую Keycloack login (Outlook-365 auth) для получения информации о профиле пользователя
Веб-приложение
Если я открою URL (https://myurl.com/login_new.php), он работает правильно, откройте Microsoft https://login.microsoft (окно входа в систему) и после ввода
возвращает информацию профиля пользователя.
Мобильное приложение
То же самое мне нужно сделать в мобильном приложении, используя inappbrowser. Я написал следующий сценарий.
Он открывает https://myurl.com/login_new.php и перенаправляет на https://login.microsoft (окно входа в систему)
В окне входа в систему после ввода имени пользователя и пароля оно застревает с отключенной кнопкой входа в систему. Ничего не происходит.
но после приостановки приложения и возобновления активности оно открывает другое окно и дает пользователю информацию
(почему работает только после паузы и возобновления работы устройства)? что я делаю не так?
Вот мой сценарий:
Здесь в скрипте после перенаправления на https://login.microsoft URL после ввода имени пользователя и пароля
браузер loadstart событие сработало, но loadtop событие не сработало.
Пожалуйста, ознакомьтесь с решением этой проблемы.
import { InAppBrowser,InAppBrowserOptions } from '@ionic-native/in-app-browser';
constructor(private iab: InAppBrowser){}
keyclockSocialLogin(){
const options: InAppBrowserOptions = {
zoom: 'no',
location:'yes',
hardwareback: 'no',
clearcache: 'yes',
clearsessioncache: 'yes'
}
var browser = this.iab.create('https://myurl.com/login_new.php', '_blank', options);
browser.on("loadstart").subscribe((event) => {
console.log(event);
});
browser.on("loaderror").subscribe((event) => {
alert('load error');
});
browser.on('loadstop').subscribe(event => {
browser.show();
browser.executeScript({ code: "localStorage.setItem( 'username', '' );" });
var loop = setInterval(function() {
browser.executeScript({
code: "localStorage.getItem('username');"
}).then(values => {
var name = values[ 0 ];
if ( name ) {
clearInterval( loop );
browser.close();
}
});
});
});
browser.on('exit').subscribe(event => {
console.log('exit called');
});
}