iOS端从外部应用返回Flutter应用失效问题咨询
iOS端实现自动返回Flutter应用的解决方案
在iOS生态中,外部应用无法主动自动返回你的Flutter App,必须通过URL Scheme或Universal Links让外部应用主动唤起你的App,以下是具体实现步骤:
1. 配置你的Flutter App的唤起方式
方式一:配置URL Scheme(简单易实现)
打开iOS项目的Info.plist文件,添加以下配置,定义你的App专属的URL Scheme(比如myflutterapp):
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myflutterapp</string> </array> </dict> </array>
方式二:配置Universal Links(推荐,更安全无弹窗)
在Apple Developer后台为你的App开启Associated Domains权限,然后在iOS项目的Info.plist中添加关联域名(比如applinks:yourdomain.com),同时在你的域名服务器上放置apple-app-site-association文件,配置App的Bundle ID和路径规则。
2. 与外部应用约定回调逻辑
你需要和被启动的外部应用达成约定:当它完成任务后,调用你的App的唤起地址(比如myflutterapp://task_finished或者对应的Universal Links地址)。
如果是你自己开发的外部应用,在iOS端可以用以下代码唤起你的Flutter App:
if let url = URL(string: "myflutterapp://task_finished") { if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } }
3. 在Flutter端监听唤起事件
使用app_links或uni_links包监听App被外部唤起的事件,处理返回后的逻辑:
- 添加依赖到
pubspec.yaml:
dependencies: app_links: ^3.4.0
- 在Flutter代码中初始化监听:
import 'package:app_links/app_links.dart'; void initState() { super.initState(); final appLinks = AppLinks(); appLinks.uriLinkStream.listen((Uri? uri) { if (uri != null && uri.path == '/task_finished') { // 处理外部应用返回后的逻辑,比如刷新页面、弹窗提示等 } }); }
4. 调整launchUrl的调用(可选)
如果需要将回调地址传递给外部应用,可以在启动URL中携带参数,比如:
final callbackUrl = 'myflutterapp://task_finished'; final uri = Uri.parse("externalapp://start_task?callback=$callbackUrl"); launchUrl(uri, mode: LaunchMode.externalApplication);
注意事项
- iOS 14及以上版本,需要在
Info.plist中添加LSApplicationQueriesSchemes,列出你要调用的外部应用的URL Scheme,否则canOpenURL会返回false。 - 如果是第三方外部应用,需要确认它支持回调到自定义的URL Scheme或Universal Links。
内容的提问来源于stack exchange,提问作者cc_9313
相关产品推荐
相关产品推荐

