文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

iOSschem与UniversalLink调试时踩坑解决记录

2023-01-18 12:02

关注

简介

scheme和Universal Link是在iOS中两种可以在网页中点击回跳到自己预定的APP的两种方式。至于这两种方式需要怎么配置,这里就不做详细的介绍了。网上的文章一搜一大堆。今天主要是说一下这次的配置过程中遇到的问题。

AppDelegate和SceneDelegate

SceneDelegate是在iOS13的时候新增的,之前做老项目的迭代更新的时候很少接触这个文件。这回就简单的和它交流一下。

对于这次的交流结论是:当AppDelegate和SceneDelegate两个文件共存的时候,我们不仅仅要关注AppDelegate中的回调函数,还要关注SceneDelegate代理的回调函数,因为在不同的iOS系统下走的文件回调是不一样的。

在iOS13之前通通走AppDelegate,iOS13之后就会走SceneDelegate。

问题:在iOS13以上冷启动的时候不会走代理函数!

上面已经说过在iOS13之前通通走AppDelegate,iOS13之后就会走SceneDelegate。

如果你用了Scheme方式:

iOS13之前会走这个代理函数

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
}

我们只需要在里面多自己相应的逻辑处理就可以了,并且不用关注是冷启动还是APP已经在后台挂起。都能在这里获取到你想要的参数。

iOS13之后会走

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{
    UIOpenURLContext *urlContext = URLContexts.anyObject
}

这时就会出现问题了,这个函数只有在APP在后台挂起的时候才会走。如果是冷启动的时候,压根不会走这个函数,从而导致我们拿不到那个想要跳转的链接地址。

如果你用了Universal Link方式:

iOS13之前会走这个代理函数

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler{
}

我们只需要在里面多自己相应的逻辑处理就可以了,并且不用关注是冷启动还是APP已经在后台挂起。都能在这里获取到你想要的参数。

iOS13之后会走

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity{
}

这时就会出现问题了,这个函数只有在APP在后台挂起的时候才会走。如果是冷启动的时候,压根不会走这个函数,从而导致我们拿不到那个想要跳转的链接地址。

总结

在你使用SceneDelegate的时候不管你是scheme还是Universal Link 都会在冷启动的时候不走代理函数。解决办法有两种:
1.你可以不用SceneDelegate这个文件。这样就可以避免问题的出现。毕竟现在的APP好像并没有强制开发者只用SceneDelegate;
2.在无数次的测试的时候我们会发现在APP冷启动的时候都会走SceneDelegate的

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions

我们可以对这个函数做做文章。 在connectionOptions中有两个属性,一个是URLContexts另一个是userActivities,你再看看对应在SceneDelegate的函数都有对应的形参,所以我们可以在冷启动的时候获取一下相应的参数然后从而达到获取链接参数的目的;

scheme:
UIOpenURLContext *urlContext = connectionOptions.URLContexts.anyObject;
Universal Link:
NSUserActivity *userActivity =connectionOptions.userActivities.anyObject;

以上就是iOS schem与Universal Link 调试时踩坑解决记录的详细内容,更多关于iOS schem Universal Link调试的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯