首页 > 解决方案 > 如果未安装应用程序,Swiftui Firebase 动态链接不起作用?

问题描述

我正在尝试在 SwiftUI 项目中实现 Firebase 动态链接,如果应用程序打开,动态链接工作正常,但如果未安装应用程序,则应用程序无法捕获链接。

应用委托已注册:

@main
struct NF_APP: App {
    
    public static let api:REST_API  = REST_API.main
    
    @Environment(\.scenePhase) var scenePhase
    @UIApplicationDelegateAdaptor(APP_delegate.self) private var appDelegate


@main
struct app: App {
....
   WindowGroup {
                w_splash()
                    .onOpenURL { (url) in
                        handleIncomingLink(url)//<-- working fine if app is open
                    }

应用委托方法:

func application(
     _ app: UIApplication,
     open url: URL,
     options: [UIApplication.OpenURLOptionsKey : Any] = [:]
 ) -> Bool {

    
    print("------------- >>>> sourceApplication <<<<-----------------")
    
    if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
     
        // Handle the deep link. For example, show the deep-linked content or
        // apply a promotional offer to the user's account.
        // ...
        print("[SOURCE APPLICATION] DynamicLink : \(dynamicLink)")
        print("[SOURCE APPLICATION] DynamicLink URL : \(String(describing: dynamicLink.url?.absoluteString))")
        print("[SOURCE APPLICATION] URL : \(String(describing: url))")
        
        if dynamicLink.url != nil ,
            let theUrl:String = dynamicLink.url?.absoluteString
        {
            self.matchReferal(theUrl)
        }
        
      return true
    }
   
    return ApplicationDelegate.shared.application(
         app,
         open: url,
         sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
         annotation: options[UIApplication.OpenURLOptionsKey.annotation]
     )

 }

//Catch referral code when app is already installed
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    
     print("------------- >>>> restorationHandler <<<<-----------------")
     print("[DYNAMIC LINK] user clicked dynamic link which is = \(String(describing: userActivity.webpageURL))")
 
    let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
  
        if error != nil
        {
            print("[DYNAMIC LINK] error is \(String(describing: error))")
        }else
        if dynamiclink?.url != nil ,
            let theUrl:String = dynamiclink?.url?.absoluteString
        {
            self.matchReferal(theUrl)
        }
        
    }
    
   
    return handled
}


//FIREA BASE DYNAMIC LINK CONIFIG START BELOW
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    
  print("------------- >>>> userActivity <<<<-----------------")
  let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
    
    
            if error != nil
            {
                print("[DYNAMIC LINK] error is \(String(describing: error))")
            }else
            if dynamiclink?.url != nil ,
                let theUrl:String = dynamiclink?.url?.absoluteString
            {
                print("[DYNAMIC][LINK] Dynamic link found \(theUrl)")
            }
    
  }

  return handled
}

  
func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
                 annotation: Any) -> Bool {
    print("------------- >>>> sourceApplication <<<<-----------------")
  if let _ = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
      
        let _ = DynamicLinks.dynamicLinks().handleUniversalLink(url) { dynamiclink, error in
         
                if error != nil
                {
                    print("[DYNAMIC LINK] error is \(String(describing: error))")
                }else
                if dynamiclink?.url != nil ,
                    let theUrl:String = dynamiclink?.url?.absoluteString
                {
                    print("[DYNAMIC][LINK] Dynamic link found \(theUrl)")
                }
         }
    
    return true
  }
  return false
}

知道为什么吗?

标签: firebaseswiftuifirebase-dynamic-links

解决方案


推荐阅读