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

Facebook延迟深度链接返回nil异常问题求助

授权状态为authorized时,调用AppLinkUtility.fetchDeferredAppLink仍返回nil并报错

调用ATTrackingManager.requestTrackingAuthorization获取到authorized授权状态后,调用AppLinkUtility.fetchDeferredAppLink始终返回nil,同时抛出以下异常:

ATTrackingManager.AuthorizationStatus必须为authorized才能使延迟深度链接生效。详情请查看:https://developer.apple.com/documentation/apptrackingtransparency

但当前授权状态确实是authorized,这明显不符合逻辑。

复现步骤

  • 登录Facebook账号
  • 打开Facebook应用广告助手工具
  • 从下拉菜单选择要测试的应用,点击提交
  • 在开发者工具区域找到“Deep Link Tester”
  • 点击“Test Deep Link”,在弹窗中输入深度链接
  • 同时勾选“Send Notification”和“Send Deferred”选项
  • 接收Facebook应用通知并点击,打开App Store
  • 通过Xcode安装应用

代码示例与细节

我尝试了多种代码写法,以下是相关代码:

AppDelegate 代码

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // 测试模式下开启追踪
        Settings.setAdvertiserTrackingEnabled(true)
        Settings.isAdvertiserIDCollectionEnabled = true
        Settings.isAutoLogAppEventsEnabled = true

        // 初始化Facebook SDK
        ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)

        Settings.shared.isAdvertiserIDCollectionEnabled = false
        Settings.shared.isAdvertiserTrackingEnabled = false
        Settings.shared.isAutoLogAppEventsEnabled = false
        return true
}

主ViewController 代码

class SomePrimaryViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
    }

    @available(iOS 14.5.1, *)
    private func presentTransparencyMode() {
        ATTrackingManager.requestTrackingAuthorization { status in
            
             switch status
            {
            case .authorized:
                
                // 追踪授权弹窗已展示,且已获取授权
                print("Authorized")
                
                // 已授权,可获取IDFA
                print(ASIdentifierManager.shared().advertisingIdentifier)
                
                // 获取延迟链接
                 DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                    self.setupDefferedLink()
                }

            case .denied:
                // 追踪授权弹窗已展示,权限被拒绝
                print("Denied")
            case .notDetermined:
                // 追踪授权弹窗未展示
                print("Not Determined")
            case .restricted:
                print("Restricted")
            @unknown default:
                print("Unknown")
            }
        }
        
    }

    private func setupDefferedLink() {
     
        // 测试模式下开启追踪
        Settings.shared.isAdvertiserIDCollectionEnabled = true
        Settings.shared.isAdvertiserIDCollectionEnabled = true
        Settings.shared.isAutoLogAppEventsEnabled = true

        let id = ASIdentifierManager.shared().advertisingIdentifier.uuidString
        let request = GraphRequest(graphPath: "/971082983006874/activities", parameters: ["event": "DEFERRED_APP_LINK",
                                                                                          "advertiser_id": id,
                                                                                          "application_tracking_enabled": "1",
                                                                                          "advertiser_tracking_enabled": "1"], httpMethod: .post)
        
        request.start { [unowned self] connection, result, error in
            if let result = result as? NSDictionary {
                print(result as Any)
                // 打印结果为包含`success: true`的字典,但没有url相关内容
            }
        }
        
        AppLinkUtility.initialize()
        AppLinkUtility.fetchDeferredAppLink { (url, error) in
            if let url = url {
                print(url)
            }
            print(error as Any)
            // 打印错误信息:
            // ATTrackingManager.AuthorizationStatus must be `authorized` for deferred deep linking to work. Read more at: https://developer.apple.com/documentation/apptrackingtransparency
            // 明明已经获取了授权,SDK却抛出这个错误
        }
        
    }

}

无论尝试哪种写法,结果始终一致:url = nil


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:45:37