美文网首页
iOS URL Types和LSApplicationQueri

iOS URL Types和LSApplicationQueri

作者: Dezi | 来源:发表于2021-09-09 18:58 被阅读0次

    一、踩坑反思

    1. 起因:调试跳转第三方App时,无法跳转。
    2. 过程:在URL Types中添加Schemes进行模拟跳转,上传开发代码到git时未能及时删除模拟代码,导致对第三方App造成影响,用户想跳转第三方App时跳转到了我们的App。
    3. 结果:删除URL Types中第三方Schemes,强升进行挽救,此处反思记录。

    针对此次造成的影响,对info.plist中的URL TypesLSApplicationQueriesSchemes进行详细说明,共勉。

    二、LSApplicationQueriesSchemes

    1. 附上LSApplicationQueriesSchemes白名单配置:

    2. 跳转代码

    当我们想跳转第三方应用时,通常使用如下方法直接跳转:

    NSURL *appUrl = [NSURL URLWithString:@"weixin://"];
    [[UIApplication sharedApplication] openURL:appUrl];
    

    或者先判断再进行跳转:

    NSURL *appUrl = [NSURL URLWithString:@"weixin://"];
    BOOL appIsExist = [[UIApplication sharedApplication] canOpenURL:appUrl];
    if (appIsExist) {
        [[UIApplication sharedApplication] openURL:appUrl];
    }
    
    • 当我们使用canOpenURL:判断手机内是否安装此App时,则必须在LSApplicationQueriesSchemes白名单中配置第三方Scheme: weixin,否则无法跳转,报错-canOpenURL: failed for URL: "weixin://" - error: "This app is not allowed to query for scheme weixin"
    • 但是当仅使用openURL:时跳转无限制。
    • 此处建议使用canOpenURL:进行跳转判断,提前发现问题,规避问题。

    三、URL types

    1. 附上URL Types配置:

    2. URL types说明

    a. 设置方式:

    项目 -> info -> URL types -> URL Schemes,设置后就拥有了自己应用的标识scheme

    注意:URL Schemes 是一个可以让 app 相互之间可以跳转的协议。每个 app 的URL Scheme都是不一样的,如果存在一样的Scheme,那么系统就会响应先安装的那个 app 的 Scheme,因为后安装的 app 的Scheme被覆盖掉了,是不能被调用的。

    b. 配置说明:

    URL types
    URL Schemes
    URL Identifier是自定义的URL Schemes名字,一般采用翻转域名的方法保证该名字的唯一性,也可以不设置,若设置必须保证唯一性。

    3. 验证

    在Safari浏览器中,输入scheme://,若能打开,则配置URL Schemes成功。

    四、总结

    1. Scheme跳转是iOS APP通信最常用到的通信方式,APP1通过openURL: 跳转到APP2,并且可以在URL中带上想要的参数,有点类似HTTPget请求。
    2. URL types里的字段是为了让别的应用能调起你自己的app,而LSApplicationQueriesSchemes里的字段是让系统允许你自己的app调起第三方app的。就相当于你LSApplicationQueriesSchemes中的字段是别人app中的URL types字段,而你URL types中的字段就是别人app中的LSApplicationQueriesSchemes中的字段。

    此处重复强调:URL Schemes 是一个可以让 app 相互之间可以跳转的协议。每个 app 的URL Scheme都是不一样的,若配置与其它App一样的URL Scheme,那么系统就会响应先安装的那个 app 的 URL Scheme,后安装的 app 的URL Scheme会被覆盖掉,不能被调用。因此配置URL type -> URL Schemes时一定要慎重再慎重,避免影响第三方App使用。

    五、规避措施

    即使有组内代码Review,但是在上传git时,必须对代码进行自我Review,任何调试代码不得上传git,若必须要上传提供测试,则新建不合并的临时分支。

    相关文章

      网友评论

          本文标题:iOS URL Types和LSApplicationQueri

          本文链接:https://www.haomeiwen.com/subject/siaiwltx.html