Flutter url_launcher (inAppBrowser) с перенаправлением обратно в приложение iOSIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Flutter url_launcher (inAppBrowser) с перенаправлением обратно в приложение iOS

Сообщение Anonymous »

Мой процесс входа в систему для oauth на iOS работает с использованием универсальных ссылок на приложения при доступе через url_launcher с режимом = external, например

Код: Выделить всё

if (!await launchUrl(
Uri.parse('$myAPI/$myAPIVersion/google/login?return_url=https://example.com/token'),
mode: LaunchMode.externalApplication
)) {
throw Exception('Could not launch');
}
Однако Apple отказывается от шаблона mode = external для потоков входа в систему в пользу браузера в приложении (например, Safari View Controller).
Плагин url_launcher обеспечивает поддержку браузеров внутри приложений, но Я не понимаю, как заставить их работать в этом случае.
Я вижу два очевидных способа поставить обратную ссылку на приложение, но ни один из них не работает..
1. Универсальные ссылки
например,

Код: Выделить всё

// link to a universal link via https
if (!await launchUrl(
Uri.parse('$myAPI/$myAPIVersion/google/login?return_url=https://example.com/token'),
mode: LaunchMode.inAppBrowserView // use safariVC
)) {
throw Exception('Could not launch');
}
Это не удается, поскольку при перенаправлении не обнаруживается универсальная ссылка — пользователь не возвращается в приложение и в конечном итоге остается в Safari.
2. Ссылки на пользовательские схемы
например,
Определите пользовательскую схему, чтобы более четко указать предполагаемый пункт назначения перенаправления.
Определить схему:

Код: Выделить всё

CFBundleURLTypes


CFBundleURLName
com.example.app
CFBundleURLSchemes

myscheme



Используйте это:

Код: Выделить всё

// link via myscheme
if (!await launchUrl(
Uri.parse('$myAPI/$myAPIVersion/google/login?return_url=myscheme://token'),
mode: LaunchMode.inAppBrowserView // use safariVC
)) {
throw Exception('Could not launch');
}
Но это приводит к ошибке:

Код: Выделить всё

flutter: PlatformException(Error, Error while launching https://api.example.com/v1/google/login?return_url=myscheme://token, null, null)
flutter:
#0      UrlLauncherIOS._failedSafariViewControllerLoadException (package:url_launcher_ios/url_launcher_ios.dart:168:5)
#1      UrlLauncherIOS._mapInAppLoadResult (package:url_launcher_ios/url_launcher_ios.dart:142:15)
#2      UrlLauncherIOS.launchUrl (package:url_launcher_ios/url_launcher_ios.dart:93:14)
Есть идеи или альтернативные подходы? (предпочел бы, если возможно, избегать ручного подхода «нажмите эту кнопку, чтобы вернуться в приложение»).
Я также отмечаю, что пробовал использовать flutter_custom_tabs, что позволило процессу входа в систему завершиться должным образом с использованием пользовательской схемы, но затем зависнуть с открытым браузером в конце потока.

Вопросы по теме это не обман:
  • Перейдите обратно в приложение из url_launcher webview – Flutter – Android (в частности, в отношении WebView – который не подходит для потоков OAuth)
  • url_launcher не открывает приложение на iOS, но работает на Android во флаттере (в частности, о canLaunch)
  • iOS перенаправляет обратно к приложениям (специфично для Swift и для конкретного бизнес-кейса)
Обновить
В конце концов, мне не удалось решить эту проблему с помощью url_launcher по причинам, указанным в комментариях.
Однако я был - смог используйте flutter_custom_tabs и решите проблему, когда браузер не закрывается (спойлер, мне просто нужно было ПРОЧИТАТЬ ДОКУМЕНТЫ 😅)

Подробнее здесь: https://stackoverflow.com/questions/783 ... to-ios-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»