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

扫描Firebase Deeplink二维码仅启动App,无法解析URL求助

解决iOS相机扫描Firebase动态链接二维码无法解析的问题

问题分析

通过Safari、备忘录或iMessage点击Firebase动态链接时,App能正常解析并跳转至对应页面;但使用iOS相机扫描二维码并选择“在BeBigger中打开”时,仅能启动App,无法读取传入的URL。核心原因是相机直接唤起App时,链接可能通过NSUserActivity而非直接的openURL传递,导致SwiftUI的onOpenURL未捕获完整的动态链接处理流程。

解决方案

1. 补充SwiftUI App生命周期的UserActivity处理

如果使用iOS 14+的SwiftUI App生命周期,除了onOpenURL,还需要添加onContinueUserActivity来处理Universal Link唤起场景:

@main
struct BeBiggerApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { incomingURL in
                    handleDynamicLink(incomingURL)
                }
                .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
                    guard let webpageURL = userActivity.webpageURL else { return }
                    handleDynamicLink(webpageURL)
                }
        }
    }
    
    private func handleDynamicLink(_ url: URL) {
        print("Incoming URL: \(url)")
        DynamicLinks.dynamicLinks().handleUniversalLink(url) { dynamicLink, error in
            guard error == nil else {
                print("Dynamic link error: \(error!.localizedDescription)")
                return
            }
            if let dynamicLink = dynamicLink {
                RoutingService.instance.handleIncomingDynamicLink(dynamicLink)
            }
        }
    }
}

2. 检查SceneDelegate的链接处理(UIKit生命周期)

如果项目仍使用SceneDelegate,需在对应方法中补充动态链接逻辑:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else { return }
    processDynamicLink(url)
}

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
       let url = userActivity.webpageURL {
        processDynamicLink(url)
    }
}

private func processDynamicLink(_ url: URL) {
    DynamicLinks.dynamicLinks().handleUniversalLink(url) { dynamicLink, error in
        guard error == nil else {
            print("Error handling link: \(error!.localizedDescription)")
            return
        }
        if let dynamicLink = dynamicLink {
            RoutingService.instance.handleIncomingDynamicLink(dynamicLink)
        }
    }
}

3. 验证Apple App Site Association配置

确保apple-app-site-association文件已正确部署在动态链接域名(如bebigger.page.link)的根目录或.well-known目录,文件需包含你的App ID和对应路径:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAM_ID.BUNDLE_ID",
        "paths": ["/*"]
      }
    ]
  }
}

可通过iOS设备设置路径:通用->VPN与设备管理,验证App关联文件是否生效。

4. 临时Workaround:强制跳转Safari

如果上述方法无效,可修改二维码生成的链接,将动态链接包装为自有域名的跳转链接,例如生成二维码的字符串改为:

https://bebigger.app/redirect?link=https://bebigger.page.link/tiRtza413UDMKcyN8

然后在bebigger.app的/redirect页面添加重定向逻辑,自动跳转到传入的动态链接。相机扫描后会先打开Safari,再通过正常流程唤起App并解析链接。

内容的提问来源于stack exchange,提问作者sadel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:05:23