iOS13 SceneDelegate 与 UniversalLinks 存在的坑。

1.SceneDelegate (iOS 13 新特性)

 Xcode 11 默认是会创建通过 UIScene 管理多个 UIWindow 的应用,工程中除了 AppDelegate 外会多一个 SceneDelegate

AppDelegate和SceneDelegate这是iPadOS带来的新的多窗口支持的结果,并且有效地将应用程序委托的工作分成两部分。

SceneDelegate这个功能在手机APP开发时,基本用不上。(建议刚创建APP时,就把这个文件删除吧。别为自己留坑。)

2.UniversalLinks

Universal Link(通用链接)是Apple在iOS9推出的一种能够方便的通过传统HTTPS链接来启动APP的功能,可以使用相同的网址打开网址和APP。当你的应用支持Universal Link(通用链接),当用户点击一个链接是可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过Safari浏览器。如果你的应用不支持的话,则会在Safari中打开该链接。

该功能配置,直接百度,千变一律的教程。

UniversalLinks中有一个坑,亲踩。我在后台配置的links 链接为 https://abcdefg.cn,我在项目中的配置applinks:abcdefg.cn/,尽管这种写法是错误的。但是iOS13开始竟然能兼容,在外部能使用https://abcdefg.cn来唤醒APP。但是,在iOS12的时候就不行了。https://abcdefg.cn失效了,原因只因为在项目中多配置了/,(为什么会多配置/,是因为看了微信的官方文档,在传UniversalLinks进SDK时,需要加个/)导致无法使用。

最近在开发中SceneDelegate搭配UniversalLinks 整出了天坑出来,唉,都是泪。

在iOS13之前,UniversalLinks通过 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray> * __nullable restorableObjects))restorationHandler 获取外部打开链接。(在APP冷启动或APP退到后台时,皆可通过上述接口获得外部链接,这里是重点,圈起来,面试要考的。罒ω罒)。

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity API_AVAILABLE(ios(13.0));

在iOS13开始并且使用SceneDelegate文件,用于对UIWindow的管理时,使用UniversalLinks唤醒APP应走指定方法(方法如上所述),当APP处于后台状态时,APP被唤醒时,会走上述方法。当APP处于冷启动时,APP不会走上述方法,无法获得外部唤起链接。在官方文档中也没有查阅到有关这类的说法。

最后只能含泪把SceneDelegate相关功能移出项目,待以后有其他解决方式再重新引用回来。

上述是我遇到的坑,UniversalLinks通过SceneDelegate在冷启动的时候,无法正常使用,暂时还未有解决办法。如各位网友,有解决之道。麻烦在评论中给我留言。

你可能感兴趣的:(iOS13 SceneDelegate 与 UniversalLinks 存在的坑。)