Flutter Firebase动态链接iOS跳转App Store而非应用问题求助
Flutter Firebase动态链接iOS跳转问题解决方案
问题描述
Flutter应用配置Firebase动态链接后,Android端功能正常,但iOS端点击预览页的「Open Link」按钮时,只会跳转至App Store,无法打开应用,调试环境和TestFlight安装的应用均出现此问题。
相关配置信息
flutter doctor -v
[!] Flutter (Channel stable, 3.7.3, on macOS 13.1 22C65 darwin-arm64, locale en-KR) • Flutter version 3.7.3 on channel stable at /Users/hyungilkang/fvm/versions/3.7.3 ! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/2.18.7/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/hyungilkang/fvm/versions/3.7.3. Consider adding /Users/hyungilkang/fvm/versions/3.7.3/bin to the front of your path. • Upstream repository https://github.com/flutter/flutter.git • Framework revision 9944297138 (13 days ago), 2023-02-08 15:46:04 -0800 • Engine revision 248290d6d5 • Dart version 2.19.2 • DevTools version 2.20.1 • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades. [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1) • Android SDK at /Users/hyungilkang/Library/Android/sdk • Platform android-33, build-tools 33.0.1 • Java binary at: /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment Zulu17.38+21-CA (build 17.0.5+8-LTS) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 14.2) • Xcode at /Applications/Xcode.app/Contents/Developer • Build 14C18 • CocoaPods version 1.11.3 [✗] Chrome - develop for the web (Cannot find Chrome executable at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome) ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable. [!] Android Studio (version 2022.1) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart ✗ Unable to find bundled Java version. • Try updating or re-installing Android Studio. [✓] VS Code (version 1.75.1) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.58.0 [✓] Connected device (2 available) • iPhone (mobile) • 00008110-001E2D4A220A401E • ios • iOS 16.1.1 20B101 • macOS (desktop) • macos • darwin-arm64 • macOS 13.1 22C65 darwin-arm64 [✓] HTTP Host Availability • All required HTTP hosts are available ! Doctor found issues in 3 categories.
AndroidManifest.xml
.... <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="incle.page.link" android:scheme="https" /> <data android:host="incle.page.link" android:scheme="http" /> </intent-filter> ....
iOS配置信息
Info.plist
... <key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://incle.page.link/share</string> </array> ... <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>Bundle ID</string> <key>CFBundleURLSchemes</key> <array> <string>com.incle.incleClientApp</string> </array> </dict> </array> ...
Runner.entitlements
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>aps-environment</key> <string>development</string> <key>com.apple.developer.associated-domains</key> <array> <string>applink:incle.page.link</string> </array> </dict> </plist>
动态链接生成代码
Future<void> onClickShare(String storeID) async { final dynamicLinkParams = DynamicLinkParameters( link: Uri.parse( "https://incle.page.link/share?route=${StoreDetailScreen.routeName}&argument=$storeID"), uriPrefix: "https://incle.page.link", androidParameters: const AndroidParameters(packageName: "com.incle.incle_client_app"), iosParameters: const IOSParameters(bundleId: "com.incle.incleClientApp"), socialMetaTagParameters: SocialMetaTagParameters( description: storeInfoState.value!.data!.storeDescription, imageUrl: Uri.parse(storeInfoState.value!.data!.storeImage.isEmpty ? '' : storeInfoState.value!.data!.storeImage.first), title: storeInfoState.value!.data!.storeName)); final dynamicLink = await FirebaseDynamicLinks.instance.buildShortLink( dynamicLinkParams, shortLinkType: ShortDynamicLinkType.short); Share.share(dynamicLink.shortUrl.toString()); }
解决方案
1. 修正FirebaseDynamicLinksCustomDomains配置
Info.plist中FirebaseDynamicLinksCustomDomains应填写动态链接的根域名前缀,而非带路径的地址。将当前值改为:
<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://incle.page.link</string> </array>
2. 调整动态链接的link参数
link字段需传递应用要接收的深层链接内容,不能使用Firebase动态链接域名。示例修改如下:
link: Uri.parse("https://incle.com/share?route=${StoreDetailScreen.routeName}&argument=$storeID"),
同时确保Firebase控制台已将该业务域名配置为关联链接的一部分。
3. 验证Bundle ID一致性
- 确认Xcode中Runner项目的Bundle ID与代码中
IOSParameters(bundleId: "com.incle.incleClientApp")完全一致,注意大小写、下划线等细节。 - 检查Info.plist中
CFBundleURLSchemes的内容是否与Bundle ID匹配。
4. 确认Associated Domains配置有效性
- 打开Xcode的Runner项目,进入「Signing & Capabilities」标签,确保「Associated Domains」已开启,且包含
applink:incle.page.link条目。 - 访问
https://incle.page.link/apple-app-site-association,检查返回的JSON中是否包含你的iOS Bundle ID(格式需包含Apple团队ID,如TEAM_ID.com.incle.incleClientApp),且paths配置正确覆盖动态链接路径。
5. 清理并重建项目
- 删除Xcode的Derived Data(路径:
~/Library/Developer/Xcode/DerivedData)。 - 执行以下命令:
flutter clean flutter pub get - 重新编译并运行iOS项目。
6. TestFlight额外检查
- 确保TestFlight对应的App Store Connect版本中,「Associated Domains」权限已正确配置,且证书包含该权限。
- 提交新版本后等待Apple处理完成(通常10-30分钟)再测试,避免缓存导致配置未生效。
内容的提问来源于stack exchange,提问作者CrimsonFoot
相关产品推荐
相关产品推荐

