我正在使用Firebase的深层链接来尝试在用户单击发送给他们的链接时在我的应用程序中提供某些功能。在Firebase网站上正确设置了深层链接。
单击发送给用户的链接并不会打开我的应用程序,但不会触发我的应用程序委托中的continue userActivity
方法,因为其中包含的所有代码均未执行。
我尝试了this StackOverflow post中建议的解决方案,但没有成功,这是在方法声明中将[UIUserActivityRestoring]切换为[Any]。
在Xcode中,我已设置关联的域以匹配我在Firebase上设置的域:applinks:myappname.page.link
;并且我添加了带有标识符“捆绑ID”的“ URL类型”和带有角色编辑器的ca.mycompany.myappname
URL方案。
所有这些当然都在设备上运行,因为我不希望它在模拟器中起作用。
这是我的应用程序委托中的方法,应调用,但不是。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
print ("The link worked")
}
我确保didFinishLaunchingWithOptions
也总是返回true。
我希望“链接有效”可以在调试控制台中实际打印出来,但事实并非如此。断点表明根本没有调用该方法,因为从未达到断点。
答案 0 :(得分:3)
有一个很好的变化,就是面对这个问题的人也可以使用iOS13 / SwiftUI。就像我一样。
我发现这个article解决了我所有的问题。
基本上,您必须知道,新的SceneDelegate中的某些方法替代了iOS 13之前在AppDelegate中调用的方法。此外,在某些极端情况下,仍可能需要AppDelegate中的方法来处理深度链接处理。
答案 1 :(得分:0)
对于任何需要它的人:
您需要使用以下代码来处理从链接到已安装的应用程序的深层链接(其他func应用程序用于不同的事情)
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
// ...
}
return handled
}
https://firebase.google.com/docs/dynamic-links/ios/receive#6
答案 2 :(得分:0)
对于场景应用,尝试添加您的逻辑作为
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
//...
}
}