Facebook延迟深度链接返回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
相关产品推荐
相关产品推荐

