universal links

universal links

是iOS9之后 苹果推出的一种能够方便的通过https 链接来启动APP的功能。当你的APP支持universal links 的话,点击配置好的连接,可以跳转到你的APP,如果你的APP没有下载 或者不支持的话,那么点击链接会通过Safari 打开。
当我使用1.8.6 版本的微信SDK实现微信分享,支付等功能的时候,后台网站需要配置universal links,对openSDK分享进行合法性校验。这是一个必填项。那么该如何配置通用链接呢?

  • 首先登陆开发者中心,在证书列表页面找到你的 APP id


    image.png
  • 点击该id,进入到该id 的配置页面,选择打开 Associated Domains


    image.png

    以上是网站后台的配置,下面进入到APP配置。

  • 打开APP项目,按如下图方式打开 Associated Domains


    image.png
  • 在domains 下面 按如下填写,注意 前面一点要以 applinks:+ 你网站域名(此域名下放下文中提到的文件)


    image.png
  • 创建名称为 apple-app-site-association 的文件,内容为json,但是不能有后缀名(如果创建了.json的文件,再手动删除后缀名 ,这样是不对的)
    创建方法:打开终端,cd 到指定文件夹,'touch apple-app-site-association' 回车
    打开文件,复制以下内容:
{
    "applinks": {
        "apps": [],//必须为空数组
        "details": [ //你的网站可以支持多个APP跳转
            {
              //appid 为你应用的唯一标识,由teamid 和 bundleid 组成
                "appID": "teamId.bundleId",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "teamId.bundleId",
                "paths": [ "*" ]
            }
        ]
    }
}
特别说明:
paths:为  限制哪些路径可以跳转到你的APP,如果不限制 可以使用通配符`*`,在微信SDK ,我设置的path 为一个 /StoreHelper/*,所以我的universal links 为 https://mydomain/StoreHelper/,微信自己会在末尾匹配相应的字符串。
注:在iOS9.3以后,此文件在未压缩状态下都不能超过128k!!!
  • 将你创建的json 文件上传到服务器(让后台开发人员放到一开始项目中配置的域名的根目录下,或者.well-known目录下,别忘了中间有个 点 . ),这是为了苹果能获取到你上传的文件,上传后先访问一下,https://yourDomain/apple-app-site-association 或者https://yourDomain/.well-known/apple-app-site-association. 其实苹果是先访问后者,再访问前者,如果不想多次访问服务器,可以直接放在.well-known 目录下。
    访问该链接,应该是能下载,或者能在网站直接打开该文件,不管什么样的形式都要能看到该文件的内容。如下:
    image.png
  • 代码中的配置,APPdelegate 中实现如下三个方法:
//以下两个方法是为了兼容低版本,适配 Custom URL scheme 自定义url,之前的传统方式
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
   //微信sdk 中的方法
    return [[HLWXAPIManager manager]hl_handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  //微信sdk 中的方法
    return [[HLWXAPIManager manager]hl_handleOpenURL:url];
}

//以下的方法是通过 https 通用链接 打开APP时 会回调的方法,如果链接配置失败,是不会打开如下方法的,会走上面的方法。在此方法中可以进行判断,因为是配置微信,所以就使用了微信sdk 中的方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    return [[HLWxApiManager manager]hl_handleOpenUniversalLink:userActivity];
}
//微信API 调用(HLWXAPIManager)
- (BOOL)hl_handleOpenURL:(NSURL *)url {
   return [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)hl_handleOpenUniversalLink:(NSUserActivity *)userActivity {
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

  • info.plist中 配置
    image.png

    不然会提示 failed for URL: "weixinULAPI://"
<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>wechat</string>
        <string>weixin</string>
        <string>weixinULAPI</string>
    </array>

2、将通用链接 universal link 放到备忘录,长按 能够可以跳转到你的APP
3、如果用于微信sdk ,以下验证的页面只出现一次,而不是每次都出现。


image.png

如果是微信登录,不会出现两次授权弹框


image.png
Universal Link(通用链接)注意点
  • Universal Link跨域问题,Universal Link必须要求跨域,如果不跨域就不会跳转。(iOS9.2之后的改动)。
    假如当前的页面的域名是A,当前网页发起跳转的域名是B,必须要求B和A是不同的域名才会触发Universal Link,如果B和A 是相同域名,只会继续在当前WebView里面进行跳转,哪怕你的Universal Link一切正常,根本不会打开APP(因为我只是适配了微信的sdk,能够实现分享登录和支付,在网页内跳转并没有做实测,所以这个需要注意)。
Universal Link请求 apple-app-site-association时机。
  • 当我们的APP在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会去get 定义的Domain下的apple-app-site-association文件。
  • iOS 会先请求 https://domain.com/.well-known/apple-app-site-association,如果此文件请求不到再 去请求https://domain.com/apple-app-site-association,如果想要避免服务器多次get请求,可以直接把apple-app-site-association放在./well-known目录下。
  • 服务器上的apple-app-site-association的更新不会让iOS本地的apple-app-site-association同步更新,即iOS只会在APP第一次启动的时候请求一次,以后除非APP更新或者重新安装,否则不会在每次打开时请求 apple-app-site-association文件。
Universal Link的好处
  • 之前的Custom URL scheme是自定义的协议,因此在没有安装该APP的情况下是无法直接打开的。而Universal Links本身就是一个能够指向web页面或者APP内容页的标准的web link,因此能够很好的兼容其他情况。
  • Universal Links是从服务器上查询哪个APP需要被打开,因此不存在Custom URL scheme那样名字被抢占冲突的情况。
  • Universal Links支持从其他APP中的uiwebview中跳转到目标APP。
  • 提供Universal Links给别的APP进行APP间的交流时,对方并不能够用这个方法去检测你的APP是否被安装(之前的`Custom URL scheme的canOpenUrl 方法可以)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容