-->

After opening iOS app “continue userActivity:” met

2019-08-18 05:59发布

问题:

I have successfully integrated Firebase dynamic links and when I click on dynamic link then my app is opening.

The issues I'm facing is after opening app from dynamic links, continue userActivity: method should be called, but nothing happens.

I've checked the all the possible thing but didn't recognised the issue.

I've searched the SO for this but none of the answer helped me.

My Code:

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

  GIDSignIn.sharedInstance().clientID = kGoogleSignInClientId
  FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

 // DynamicLinks.performDiagnostics(completion: nil)

  FirebaseApp.configure()

  return true
}

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

  if url.absoluteString.contains(kFBAppId) {

    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)

  }

  if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
    print(dynamicLink.url ?? URL(string: "test") as Any)
    return true
  }

    return GIDSignIn.sharedInstance().handle(url, sourceApplication: options[.sourceApplication] as? String, annotation: options[.annotation])

}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

  //This method is not getting called
}

回答1:

To handle universal link in your application first you have to add an entitlement file with supported urls in your application.

To do so open Xcode, Select your project, Goto Capabilities and find Associated Domain section.

Turn on this capability and add an entry for each domain your app supports with a prefix of applinks:

Now you have to implement application(_:continue:restorationHandler:) in your AppDelegate file. This method will be called when user click on link which your supports.



回答2:

The blunder of Google.

I don't know whether they keep their doc. up to date or not.

I have just copy-pasted the code from the Google's official Firebase dynamic link document.

Why was the continue userActivity: method is not called?

The reason is (See the difference in following method)

Copy pasted from google doc. - Wrong one

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

}

I wrote this (without copy paste from google doc.) - Correct one

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {

}

I've made bold the difference.

This is what I was trying for many hours. It is really very frustrating for me to blindly trust on google doc.:-|

Hope this may help other.