You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 16:06:28