#ios #typescript #cordova #ionic-framework #keycloak
Вопрос:
У меня есть ионный проект , который все еще использует Cordova@10.0.0
, angular@5.2.11
и typescript: ^3.9.5
amp; node@10
В настоящее время я пытаюсь реализовать аутентификацию с помощью ключа. Следуя этим шагам здесь Официальный ключ, я пытаюсь внедрить это в свое приложение.
Шаги, которые я сделал:
- Добавьте
"cordova-plugin-inappbrowser": "5.0.0"
к моемуdevDependencies
вpackage.json
- Добавьте
"keycloak-js": "^15.0.2"
к моемуdependencies
вpackage.json
- Обновил свой
tsconfig.json
, где я добавил"ES2018"
вcompilerOptions - lib
- Обновил свой
tsconfig.json
, где я добавилes2015
вcompilerOptions - module
- Обновил свой
tsconfig.json
, где я добавилes6
вcompilerOptions - target
config.xml
В обновленной целевой версии iOS<preference name="deployment-target" value="14.0" />
Приложение работает нормально.
Когда приложение загружается, я получаю следующую ошибку в консоли симулятора safari:
Error:
Uncaught (in promise): TypeError: Promise.race([promise, timeoutPromise]).finally is not a function.
(In 'Promise.race([promise, timeoutPromise]).finally(function () { clearTimeout(timeoutHandle); })',
'Promise.race([promise, timeoutPromise]).finally' is undefined)
Обещание, вызывающее эту проблему, можно найти здесь, в официальном репозитории Github от Keycloak. При изменении этого .then(..)
значения ошибка больше не возникает. Но изменение зависимости вручную на самом деле не является вариантом.
Я что-то пропустил или это действительно ошибка? Я не могу найти ничего полезного в Интернете.
Как я инициализирую брелок:
public keycloak: Keycloak.KeycloakInstance;
this.keycloak = Keycloak({
clientId: 'webapp',
realm: 'master',
url: 'http://localhost:8080/auth/'
});
this.keycloak.init({
adapter: 'cordova'
})
Выход из ionic info
:
Ionic:
Ionic CLI : 6.17.0 (/usr/local/lib/node_modules/@ionic/cli)
Ionic Framework : ionic-angular 3.9.2
@ionic/app-scripts : 3.2.4
Cordova:
Cordova CLI : 10.0.0
Cordova Platforms : android 7.1.4, ios 6.2.0
Cordova Plugins : no whitelisted plugins (18 plugins total)
Utility:
cordova-res : 0.15.3
native-run (update available: 1.4.1) : 1.4.0
System:
ios-deploy : 1.11.4
ios-sim : 8.0.2
NodeJS : v10.24.1 (/usr/local/Cellar/node@10/10.24.1_1/bin/node)
npm : 6.14.12
OS : macOS Big Sur
Xcode : Xcode 13.0 Build version 13A233
И navigator.userAgend
дает следующее для используемой версии safari:
"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
Я хотел бы также упомянуть. В веб-инспекторе приложения Cordova на симуляторе при вызове new Promise(() => {}).finally;
он возвращает undefined
результат, но когда я делаю это в веб-инспекторе Safari на симуляторе, он возвращает мне действительный вывод.
Комментарии:
1. ваша версия ионного довольно старая. Я бы обновил эту часть.