Flutter iOS OAuth登录:url_launcher内嵌浏览器无法跳转回应用
iOS OAuth 内嵌浏览器登录适配问题及解决
问题背景
原本使用url_launcher的externalApplication模式结合Universal Links能正常完成iOS端OAuth登录,但苹果审核拒绝了这种方式,要求必须采用内嵌浏览器(如Safari View Controller)实现登录流程。
尝试url_launcher内嵌模式的失败情况
1. Universal Links 跳转回应用失效
切换到LaunchMode.inAppBrowserView模式调用登录链接后,OAuth授权完成的重定向环节无法识别Universal Links,用户会停留在Safari内嵌页面,无法自动返回应用。代码示例:
if (!await launchUrl( Uri.parse('$myAPI/$myAPIVersion/google/login?return_url=https://example.com/token'), mode: LaunchMode.inAppBrowserView // 使用Safari View Controller )) { throw Exception('Could not launch'); }
2. 自定义Scheme 触发平台异常
在Info.plist中配置了自定义Scheme:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.example.app</string> <key>CFBundleURLSchemes</key> <array> <string>myscheme</string> </array> </dict> </array>
调用时直接抛出PlatformException:
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 实现自动关闭
最初尝试flutter_custom_tabs插件时,能完成整个OAuth登录流程,但存在浏览器无法自动关闭的问题。查阅插件文档后解决了该问题,最终实现了符合苹果要求的内嵌浏览器登录方案。
内容的提问来源于stack exchange,提问作者danwild
相关产品推荐
相关产品推荐

