Хобрук: Ваш путь к мастерству в программировании

iPhone - плагин handleOpenURL Custom-URL-scheme - без перенаправления обратно в приложение

У меня есть приложение, написанное с использованием AngularJS 1.5.3, Cordova и Ionic v1.

Я использую эти 2 плагина для реализации некоторых функций SSO (Single-Sign-On).

https://github.com/EddyVerbruggen/Custom-URL-scheme

https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/

ionic info

Ionic:

   ionic (Ionic CLI) : 4.10.3 (C:\Users\User\node_modules\ionic)
   Ionic Framework   : ionic1 1.3.5
   @ionic/v1-toolkit : 1.0.22

Cordova:

   cordova (Cordova CLI) : 8.1.2 ([email protected])
   Cordova Platforms     : android 8.1.0, ios 6.1.0, browser 5.0.4, windows 4.4.3
   Cordova Plugins       : cordova-plugin-ionic-webview 4.1.3, (and 17 other plugins)

System:

   Android SDK Tools : 26.1.1 (C:\Users\User\Documents\Android\sdk)
   NodeJS            : v10.21.0 (C:\Program Files\nodejs\node.exe)
   npm               : 6.14.4
   OS                : Windows 10

config.xml

   <plugin name="cordova-plugin-inappbrowser" spec="^4.0.0">
        <variable name="usewkwebview" value="true" />
    </plugin>
    
    <plugin name="cordova-plugin-customurlscheme" spec="https://github.com/EddyVerbruggen/Custom-URL-scheme.git">
        <variable name="URL_SCHEME" value="selfserviceapp" />
        <variable name="ANDROID_SCHEME" value=" " />
        <variable name="ANDROID_HOST" value=" " />
        <variable name="ANDROID_PATHPREFIX" value="/" />
    </plugin>

As I'm using cordova-ios 6.1.0 I'm using WkWebView only.

<platform name="ios">
    <preference name="WKWebViewOnly" value="true" />

пакет.json

 "dependencies": {
    "cordova-android": "^8.1.0",
    "cordova-ios": "^6.1.0",
    "cordova-android-support-gradle-release": "^3.0.1",
    "cordova-plugin-camera": "^4.1.0",
    "cordova-plugin-compat": "^1.2.0",
    "cordova-plugin-customurlscheme": "git+https://github.com/EddyVerbruggen/Custom-URL-scheme.git",
    "cordova-plugin-device": "^2.0.3",
    "cordova-plugin-file": "^6.0.2",
    "cordova-plugin-geolocation": "^4.0.2",
    "cordova-plugin-inappbrowser": "^4.0.0",
    "cordova-plugin-network-information": "^2.0.2",
    "cordova-plugin-safariviewcontroller": "^1.6.0",
    "cordova-plugin-save-image": "^0.3.0",
    "cordova-plugin-settings-hook": "^0.2.7",
    "cordova-plugin-splashscreen": "^5.0.4",
    "cordova-plugin-statusbar": "^2.4.3",
    "cordova-plugin-whitelist": "^1.3.4",
    "cordova.plugins.diagnostic": "^4.0.12",
    "ionic-plugin-keyboard": "^2.2.1",
    "natives": "^1.1.6"
  },


    "plugins": {
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-compat": {},
      "cordova-plugin-device": {},
      "cordova-plugin-settings-hook": {},
      "cordova-plugin-save-image": {},
      "cordova-plugin-file": {},
      "cordova-plugin-network-information": {},
      "cordova-plugin-whitelist": {},
      "ionic-plugin-keyboard": {},
      "cordova-plugin-safariviewcontroller": {},
      "cordova-plugin-camera": {},
      "cordova-plugin-geolocation": {},
      "cordova.plugins.diagnostic": {
        "ANDROID_SUPPORT_VERSION": "28.+"
      },
      "cordova-android-support-gradle-release": {
        "ANDROID_SUPPORT_VERSION": "27.+"
      },
      "cordova-plugin-customurlscheme": {
        "URL_SCHEME": "selfserviceapp",
        "ANDROID_SCHEME": " ",
        "ANDROID_HOST": " ",
        "ANDROID_PATHPREFIX": "/"
      },
      "cordova-plugin-inappbrowser": {
        "usewkwebview": "true"
      }
    }

Приложение откроет поставщика удостоверений в браузере, пользователь войдет в него, а затем будет перенаправлен обратно в приложение.

Он отлично работает на Android, но для iOS он не перенаправляет обратно в приложение.

Он остается на странице браузера, и пользователь должен вручную нажать кнопку «Готово», чтобы перенаправить обратно в приложение.

*-Информация.plist

введите здесь описание изображения

введите здесь описание изображения

фрагмент кода:

на оконном объекте

var handleOpenURL = null;

window['handleOpenURL'] = function (url) {

    if (handleOpenURL) {
        handleOpenURL(url);
    }

};


        self.openUrl = function (url) {

            return new Promise(function (resolve, reject) {

                try {

                    SafariViewController.isAvailable(function (available) {
                        if (available) {

                            self.hideSpinner();

                            handleOpenURL = function (url) {

                                if (url.startsWith(ClientConfig.config.redirect_uri)) {
                                    self.processAuthCodeResponse(url)
                                        .then(function (token) {
                                            resolve(token);
                                        })
                                        .catch(function(error) {
                                            reject(error);
                                        })
                                        .finally(function() {
                                            window['SafariViewController'].hide();
                                        });
                                }
                            }

                            SafariViewController.show({
                                url: url
                            })

                        } else {
                            alert(' Browser Not Available! ');
                        }

                    });

                }
                catch (error) {
                    reject(error);
                }

            });

        };

  • подскажите пожалуйста как решить? 19.05.2021

Ответы:


1

Я думаю, что это не поддерживается в Ionic v1, вы можете попробовать глубокие ссылки Firebase, чтобы перенаправить URL-адрес обратно в ваше приложение.

18.08.2020
Новые материалы

Прогресс в технологии Трансформеров часть 3
Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

Приключения в Javascript, часть 1
Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..