iOS9 Universal Links踩坑之旅,移动应用之de

作者: kurt_wang | 来源:发表于2017-01-03 12:51 被阅读9655次
嘿哈.jpg

参考文章:
1.大招之 官方文档
2.不错的博文
3.苹果验证通用链接是否可用的网站
4.通用链接文件存放的server需要支持https 苹果支持的https证书列表

简单粗暴,有一个需求:


  • 手机打开我们的网站,点击打开按钮或者收藏按钮,用户如果已经安装app,跳转到app做相应的操作。
  • 如果没有安装app,则跳转到应用商店提示用户下载安装。

方法1: URL Scheme


    holy 个 shit 啊,第一时间想到的是url scheme ,然后将参数配置在url scheme后面,唤醒app再进行页面跳转逻辑。

    但残酷的现实是企鹅和微信都把url scheme 唤醒app这种方式给禁了。

方法2: meta标签


    然后考虑了在网页上对meta 标签做手脚,可以实现类似下图的效果:

meta标签示例.jpeg

meta标签的格式如下:

 <meta charset="UTF-8" name="apple-itunes-app" content="app-id=1234567890, affiliate-data=myAffiliateData, app-argument=yourScheme://">

    这样添加meta标签后的网页,使用safari打开的时候,就会在顶部显示自己app的导航条。
    如果没有安装app点击能够跳转到appstore去下载,如果安装了app就能直接通过顶部的meta标签唤醒app了。

方法3:Why Universal Links?


    上面两种方式都能实现某一方面的需求,但无法完美解决。于是就想到了iOS9之后的Universal Links。

什么是Universal Links呢?

    Universal Links就是一个通用链接,iOS9以上的用户,可以通过点击这个链接无缝的重定向到一个app应用,而不需要通过safari打开跳转。

    如果用户没有安装这个app,则会在safari中打开这个链接指向的网页。

如何支持Universal Links呢?

    按照苹果官方文档来说,支持通用链接非常简单哟,只需要三步呢

1.创建一个名字叫做apple-app-site-association,包含固定格式的json文件

2.将这个文件上传到你的服务器,可以将这个文件放到服务器的根目录下,也可以放到.well-known这个子目录下。

3.配置app,然后在app里面添加代理方法

    如果已经配置过Universal Links,那么在用户第一次安装app时,苹果会发送一个请求,请求你服务器上的apple-app-site-association文件。

    请求apple-app-site-association文件成功之后,用户就可以使用Universal Links唤醒app了。

详细的配置流程如下


(1) 关于apple-app-site-association文件的配置

{
"applinks": {
        "apps": [],
        "details": [
            {
                "appID": "teamID.bundleId”,
                "paths": ["/deaplink","/wwdc/news/","*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

    创建一个包含上述格式的json文件,文件名字必须为apple-app-site-association,不能带后缀名,有的电脑设置的隐藏后缀名,这点需要注意。

appID

    appID 的 格式为 teamID.bundleId形式。

如何获取teamID呢?

    登录开发者网站 ,找到Membership选项卡。

teamId.png

    譬如说我的teamIDxxxxxxxxxxxbundleIdcom.mytest.app
    那么我的appID就是:xxxxxxxxxxx.com.mytest.app

paths

    paths配置,实际上就是限制哪些路径可以唤醒app,哪些路径不能唤醒app。格式如下:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
  • 使用*配置,则整个网站都可以使用

  • 使用特定的URL,例如/wwdc/news/来指定某一个特殊的链接

  • 在特定URL后面添加*,例如 /videos/wwdc/2015/*, 来指定网站的某一部分

  • 除了使用*来匹配任意字符,你也可以使用 ?来匹配单个字符,你可以在路径当中结合这两个字符使用,例如 /foo/*/bar/201?/mypage

需要注意的是:
配置的paths路径,是区分大小写的

验证apple-app-site-association文件

    文件配置完成之后,将其上传到你的服务器根目录或者.well-known这个子目录下。

  • 确保使用https://yourdomain.com/apple-app-site-association这个链接可以访问到,yourdomain.com为你的服务器域名。
  • 也可以使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:
Validation Tool.png
  • 出现该提示为apple-app-site-association文件配置正确。
  • 出现404错误码提示,则为apple-app-site-association文件未上传成功,或者使用https://yourdomain.com/apple-app-site-association路径无法访问。

(2) 建立web网页和app应用之间的关联 -> app IDs 配置 和 项目配置

app IDs 配置

    进入开发者网站,找到你自己的bundleId,可以点击edit按钮,开启associate domains,如下图:

associated domains.png
项目配置

    在项目的Capablities中开启Associated domains,如下图:

appLinks.png
    注意domains可以添加多个,前缀必须为applinks:applinks:后为你的服务器的域名。
代码接收Universal Links唤醒

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    NSLog(@"userActivity : %@",userActivity.webpageURL.description);
    return YES;
}

    在appdelegate中实现上面这个方法,当使用Universal Links唤醒app时就执行这个方法。

(3)验证以上配置

    快捷验证,在备忘录中输入https://yourdomain.com/apple-app-site-association,长按这个链接,出现下图提示则配置成功。

successful.png

某些坑


  • 服务器必须要支持https,而且需要支持TLS1.2协议以上,不过相信苹果强制支持https之后,这个坑就会慢慢填上了。现在还有很多童鞋的服务器使用的免费的证书,或者证书不被苹果信任,然后就会导致无法下载apple-app-site-association。苹果支持的https根证书列表
  • 只支持iOS9以上
  • apple-app-site-association文件名千万不能写错啊
  • 使用charles抓包显示,只有初次安装app时才会去请求apple-app-site-association文件,所以测试时有可能因为网络波动导致apple-app-site-association文件获取失败。这种情况,多卸载几次,安装时使用4G。
  • 验证各种配置的还有一个网站,需要打成ipa包丢上去。

小结一下


    Universal Links的配置总结起来很简单:

  • 去开发者网站配置appid,找到teamid
  • 创建一个没有后缀名的apple-app-site-association文件,填写相应的配置
  • 配置项目,并编写相应的唤醒处理逻辑
    但是为什么要配置这些东西呢?配置他们的目的分别又是什么呢?我们换个角度来考虑一下

    先来看一下审核条款中的一项规定

  2.5.6 Apps that browse the web must use the appropriate WebKit framework and WebKit Javascript.
  2.5.6 浏览网页必须要使用恰当的WebKit和WebKit JS,=͟͟͞͞( •̀д•́)app浏览网页使用的都是苹果的`WebKit`哟。

    而Universal Links之所以可行,也正是因为这个‘恰当’的WebKit。运行在iOS上的所有app,当他们使用苹果的WebKit打开某一个链接时,WebKit肯定是能拦截到的。

    那么,Universal Links相关配置的作用就非常明了了。

Q:appid和项目中为什么要配置支持associate domains呢?
A:为了在app启动的时候告诉系统,我这个app支持Universal Links呀,这样系统才方便根据项目中配置的domain域,去下载apple-app-site-association文件呀。

Q:apple-app-site-association文件配置了一堆是干啥用的呀?
A:作为WebKit加载链接时进行拦截,然后跳转到目标app的配置文件呀。

2017年9月14日更新----评论区问题汇总


  • 按照上面写的配好了,怎么死活打不开呀???

    1.支持https呀,一定要是符合苹果认证的https证书呀。

    2.系统问题,确保iOS9以上

    3.配置文件问题,apple-app-site-association文件中配置的path和测试用的通用链接不一致,注意是区分大小写的。

    4.域名问题,xcode中配置的域名一不小心写错了。

  • 为毛有的手机成功了,有的手机就不行呢???

    1.上面也提到过,因为网络波动有可能会导致部分用户第一次安装时,无法下载apple-app-site-association文件,这个只能引导用户删除重装或者在迭代时修改Associated Domains配置告诉系统重新下载apple-app-site-association文件。

    2.另外一种可能是苹果抽风导致,笔者今年年初一碰到过一个蛋疼的问题,从中午一直到下午4点发现重复的删除重装,app也不会请求服务器的apple-app-site-association文件,过了4点之后就好了。当时因为时间特殊并没有深究到底是什么原因导致。

  • 服务器换域名了肿么办???

    笔者做了一个小测试,当Associated Domains添加新的 Domains的之后,在app再次启动的时候抓包发现(不需要删除重装),苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。

    也就是说Associated Domains发生改变的话,系统是会知道的,这样就可以在迭代的时候删除旧的域名,添加新的域名了。
    另外Domains的配置也可以使用通配符,例如:applinks:*.mywebsite.com

  • 全都配置好了,项目也能唤起来了,web页面到底该怎么弄呀???通用链接指向的服务器的页面到底应该是哪个?

    我们之前iOS和安卓用的是同一个网页,也就是说从app内分享出去的网页,可以被苹果用户和安卓用户同时查看,在这里我们是由web童鞋使用js判断当前所处的平台以及其系统。

    如果是安卓用户,则显示安卓相关提示页面。

    如果是苹果用户,那么分两种:

    1、如果是9以上的系统,相关的“在app内打开”按钮的链接配置的就是我们的通用链接Universal Links了,且该通用链接地址指向的是一个 app下载引导页面,那么当用户安装了app,即可通过通用链接唤醒app;如果用户没有安装app,那么就会跳转到通用链接指向的app下载引导页面,达到最大化的客户导流。

    2、如果是9以下的系统,则由web童鞋在当前页面添加一个 “右上角在safari打开”,相应的 “在app内打开”的按钮就会发一个 跳转到我们app schema的重定向,以实现在safari中唤醒我们的app。

  • 当使用通用链接唤醒app之后,手机右上角有一个小按钮?

    那个小按钮是可以引导用户跳转到safari中,名字叫bread crumbs button(面包屑),当然也去不掉。

  • 备忘录和safari中都可以打开app,怎么分享到其他app里面就不行了?

    未跨域导致的,如:分享到微信的链接是 https://www.mydomain.com/share.html,然后该网页中的“在app内打开”按钮配置的通用链接为 https://www.mydomain.com/index.html
    跨域的意思是说,通用链接 和 调用通用链接的网页不要使用同一域名。
    即如果通用链接域名为“www.mydomain.com”,则通用链接所处的网页域名就不能是“www.mydomain.com”。

微信屏蔽Universal Links的猜想


    微信6.6.1中测试中发现,通用链接被微信屏蔽了。微信虽然能打开通用链接指向的网页,但是无法唤醒app。
    特地在本地开了一个服务器跑了一下测试网页,网页内添加了两个a标签,一个加载同域名链接,一个加载不同域名的链接。
    测试结果发现,如果是同域名的通用链接微信可以正常打开,如果是不同域名的通用链接,虽然该链接指向的网页可以正常打开,但是无法唤醒app。
    考虑到Universal Links要求跨域,微信应该是针对网页内加载不同域名链接时做的拦截。

  2.5.6 Apps that browse the web must use the appropriate WebKit framework and WebKit Javascript.

    我们通过苹果审核条例2.5.6知道iOS加载网页只允许使用苹果提供的WebKit framework,而这个是Universal Link能够实现的前提条件。

    配置无误的话使用WebKit加载Universal Link可以唤醒app,那么微信是怎么绕过WebKit的呢?

    猜想微信的浏览器不是直接load request,而是将这个链接先转发给服务器,服务器抓取当前域名根目录或者.wellknow子目录下的 associate文件。

    如果能够抓取到,则说明该域名实现了Universal Link,然后通过服务器获取该链接的页面内容,之后转发给客户端,使用其服务器做中转,绕过WebKit的load request唤醒。

    太不要face了눈_눈! 如果还要做兼容,只能回归到原来的方式了,在需要唤醒app的地方添加蒙版,引导用户微信右上角在safari中打开。

暂时的猜想(ง •̀_•́)ง┻━┻掀桌

  • 欢迎大家在评论区继续互动呀,私信不好一起玩耍呀。

相关文章

  • iOS9 Universal Links踩坑之旅,移动应用之de

    参考文章:1.大招之 官方文档2.不错的博文3.苹果验证通用链接是否可用的网站4.通用链接文件存放的server需...

  • Universal Links

    什么是Universal Links? Universal Links是iOS9推出的一项功能,使你的应用可以通过...

  • iOS Universal Links踩坑

    自从微信7.0.5版本放开 Universal Links之后,就把这种无缝唤醒App的方式提上日程了(主要是遇到...

  • Universal Links 踩坑记录

    参考简洁版:https://www.jianshu.com/p/259f0a93a07b[https://www....

  • iOS 通用链接

    Support Universal Links When you support universal links,...

  • iOS Universal links

    原文:iOS9 Universal Links (通用链接) - 小孩的技术博客 看到了教程直接拿来,学习一波 ...

  • Universal Links

    什么是Universal Links? iOS9之后,Apple推出的一种通用链接,能够方便的通过https链接来...

  • Universal Links

    How Do Universal Links Work in iOS 9? 在Universal links出现之...

  • iOS之Universal Links应用

    前言:Universal Links是苹果在iOS9上开始支持的外部跳转App的功能,正如它的名字Universa...

  • iOS Universal Links(通用链接)

    简介 什么是Universal Links(通用链接)? 这是iOS9推出的一项功能,如果你的应用支持Univer...

网友评论

  • 0038f44401d8:请问,我的app从后台杀掉结束运行,点开这个链接会唤醒app但是没有进行跳转是什么原因呢。
  • 福瑞:微信拦截不是靠这个,是在shouldStartLoadWithRequest时候拦截的。
    我之前看到过一个文章分析过,https://yq.aliyun.com/articles/608583
    kurt_wang:嗯,谢谢指出。

    但也不是在shouldStartLoadWithRequest中做的拦截。文章中关于微信拦截的内容已做更新,提出猜想后没有做验证是我的错。

    写的还有个关于UIWebview和WKWebview的demo,在这里:https://github.com/wkjsos/demoTest/tree/master/2018-0726-testWebview(%E6%8B%A6%E6%88%AAuniversal%20links)
  • 冰三尺:问个问题, 我们现在有一个需求, 就是通过Safari或者App 打开另外一个App的时候, 通过Scheme的方式会先有一个弹窗, 现在想把这个弹窗给去掉, 使用Universal Links 可以解决这个问题吗?
    kurt_wang:可以解决
  • 杪夏荷月:请问一下,如果没上架呢是不是就不能跳转啊
    zuolingfeng:可以跳转的吧
  • zuolingfeng:楼主,问一下,现在用universal links微信跳转不行了么?
    kurt_wang:很早就不行了,关于如何拦截,可以参考下文章中的更新
  • 杪夏荷月:请问我还没有上传APPstore我要怎么唤醒呢
  • 杪夏荷月:请问这个是自己的网址吗还是苹果的网址 "paths": ["/deaplink","/wwdc/news/","*"]
  • pruple_Boy:坑爹的微信,这个又被它jj了
    zuolingfeng:@pruple_Boy 我们后面参考的豆瓣处理方法,坑爹的微信
    pruple_Boy:@zuolingfeng 微信 6.6.6 版本已经做了屏蔽,心里一万个xxx
    zuolingfeng:现在用universal links微信跳转不行了么?
  • 跟着内心走:请问楼主,我现在能调起app,但不能收到h5给我传过来的参数是怎么回事呢。-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{}
    这个方法里的userActivity里面拿不到activityType和webpageURL
  • 神经病_老头子:我的走苹果验证的时候一直提示 Error cannot parse app site association。是我文件有问题么?我给后台是一个没后缀名的文件。但是现在我走https://myServer.com/.well-known/apple-app-site-association的时候总是能下载下来一个.dms文件。这样是正常的么
    你可识得此阵:正常的,就是这样
  • 把你的天空染成淡蓝色:请问 我们现在的需求是 网页端跳到APP端 通过这个方式 可以传递一些参数进去吗?比如用户的某些信息
    kurt_wang:@把你的天空染成淡蓝色
    当然可以啊,看方法
    -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    NSLog(@"userActivity : %@",userActivity.webpageURL.description);
    return YES;
    }

    在链接后边拼呗,拼完自己取。
  • Eren_519e:作者大大,请教一下在最新版xcode 9.2下debug编译的版本可以拉起应用吗?我之前没升级前按照您的流程是能通过safiri正常拉起应用的,但是后来升级xcode以后再编译的版本就无法拉起!
    李枫林:@我的昵称在不在 解决了,是测试的链接不对
    我的昵称在不在:@李枫林 我的也是无法唤起app。你们解决了吗
    李枫林:你的也无法启动App吗,我现在刚开始做这个功能,也是无法启动App,备忘录和qq都不行,而https://search.developer.apple.com/appsearch-validation-tool/检测是passed的,不知道怎么回事
  • 孤胆走天涯:作者你好,请问怎么能让地图应用出现在微信位置共享中的导航应用列表中? 用这种方式也可以吗?
  • 9becbd29dd79:求教作者大大 我在备忘录和Safari中都可以直接跳过去 可是在微信里缺怎么也跳不过去 求解 ....
    kurt_wang:@拖油瓶路人甲 这么神奇吗?跨域之后,备忘录快捷验证过了之后,微信还打不开的情况我还真没碰到过呢。
    9becbd29dd79:@kurt_wang 是两个不同的域名 在上周测试的时候也调通了 可是这周打包过后就跳转不过去了
    kurt_wang:需要强制跨域,参考文章评论区问题汇总中“5.域名问题”中的解决办法。
  • 偏偏就是祢:能加微信请教下吗?
  • 偏偏就是祢:测试环境能从网页跳转app?
  • 6ea8c6a1d65d:作者大大,请我一下,我app集成了Universal Links,在备忘录,网页中都有直接打开app的按钮,Safari网页在头部多了一块打开app的区域,但是在微信网页怎么直接打开呢,只能点开微信右上角按钮,然后选择Safari打开,才能直接打开app吗?
    偏偏就是祢:@kurt_wang 请问分享到微信的链接需要做什么处理才能点击后直接跳转app?
    偏偏就是祢:在微信或者qq中打开不能跳转到app,在备忘录和safari打开就行
    kurt_wang:@保护视力从我做起
    1、在备忘录中出现了打开app的按钮,那就说明你的Universal Links配置没有问题。在微信中或者其他地方都可以直接使用配置好的通用链接,直接唤醒app,不需要再使用Safari打开。
    2、至于你说的“Safari网页在头部多了一块打开app的区域”,你看一下样式是不是和文章中“方法2:meta标签”中所说的样式一致。如果你说的是这一块区域,是不用处理的,有就有了,没有也无所谓。
  • 帅狗黑皮668:牛逼 刚好用到项目中了
  • JopiNFlyyy:你好,请问下我已经实现了微信跳转app,但是打开app的同时会打开一个Safari,请问能不打开Safari么
    JopiNFlyyy:@kurt_wang 啊。。原来是appdelegate中写了,openUrl:userActivity.webpageURL:sweat: sweat: sweat: sweat:
    JopiNFlyyy:@kurt_wang 就是微信里面点击了,app和Safari同时被打开了,而且Safari略迟于app被打开,Safari左上角会有一个"回到xx app的按钮":cold_sweat:
    kurt_wang:@JopiNFlyyy :flushed: 没有理解“同时会打开一个safari”的场景,跳转到app之后会直接跳到safari?还是说打开app之后右上角有一个打开safari的小按钮?
  • 纷纷扰扰:请问下,网站不是支持符合苹果认证的https证书怎么办
    纷纷扰扰:@kurt_wang 好滴 那除了换证书 没有别的办法么
    kurt_wang:@纷纷扰扰 就用不了呗:smirk:
  • 不想重复造轮子:楼主 直接http://domains/wwdc/news 类似这样 就能直接打开app吗 ?
    不想重复造轮子:@kurt_wang 支持https的 去检测的网站放入ipa包 提示 Your file must be served with content type "application/pkcs7-mime" 这个要怎么处理
    kurt_wang:请支持https
    不想重复造轮子:再微信或QQ 直接访问
  • 13149a3d9e65:请教楼主大大 :
    我在xcode 中的配置 都已经OK了 , 也可以 通过浏览器 直接 唤起APP , 但是 H5 的页面的代码却不知道怎么写 ? H5页面 分享 到微信后 右上角通过浏览器打开, 可以直接唤起APP, 但是点击"立即打开"按钮 , 就不能唤起APP . 请教原因 ?
    13149a3d9e65:@死心 applinks:域名配置好不代表所有都OK 的 , 必须是https的 , 然后域名根目录下边可以访问到你的apple-app-site-association , 用苹果那个测试的测下 . 如果这些没问题 ,直接域名就可以打开APP 的 .
    kurt_wang:同样抱歉这么久才回复,先回答你第一个问题,“h5的代码怎么写?”。
    我们之前iOS和安卓用的是同一个网页,也就是说从app内分享出去的网页,可以被苹果用户和安卓用户同时查看,在这里我们是由web童鞋使用js判断当前所处的平台以及其系统,
    如果是安卓用户,则显示安卓相关提示页面。
    如果是苹果用户,那么分两种:
    1。如果是9以上的系统,相关的“在app内打开”按钮的链接配置的就是我们的通用链接Universal Links了,且该通用链接地址指向的是一个 app下载引导页面,那么当用户安装了app,即可通过通用链接唤醒app;如果用户没有安装app,那么就会跳转到通用链接指向的app下载引导页面,达到最大化的客户导流。
    2。如果是9以下的系统,则由web童鞋在当前页面添加一个 “右上角在safari打开”,相应的 “在app内打开”的按钮就会发一个 跳转到我们app schema的重定向,以实现在safari中唤醒我们的app。

    第二个问题,额,没有理解
    :stuck_out_tongue_closed_eyes:
    不想重复造轮子:我配置好了域名 但打不开app 你链接是这样的?
  • Eric_LG:请教:抓包工具已经看到apple-app-site-association下载下来了,但是就调不起来。apple-app-site-association文件里面的内容核查了再核查,teamID是从xcode中查看的general->signing->team, bundleID就是bundle identifer后面的cn.xx.xxxx. 还会是哪里出问题了呢,搞了一天了
    f003aad778a1:@kurt_wang请问下:我在微信上点击的时候把apple-app-site-association文件打开了是怎么回事呢
    Eric_LG:@kurt_wang 感谢你!
    kurt_wang:抱歉回复的有些晚,单只看你描述的问题不好排查,只能慢慢排除了:
    1.系统问题,需要iOS9以上
    2.服务器https证书的问题,快捷排除方法可以在浏览器中输入服务器上任意一个地址,例如 https://myStarCloud.com/index.html ,在浏览器网址输入框左侧有一个小锁的按钮,点开可以查看证书信息,确保你服务器的证书是苹果信任的,根证书信任列表在这里 https://support.apple.com/en-us/HT204132。
    3.具体你说的“调不起来”,这个场景我不太理解,是指在微信中打开你在apple-app-site-association文件中配置的网页路径,但是无法唤醒app吗?这个你就需要排查apple-app-site-association文件中你配置的路径和你输入的路径是否一致了。
  • 97e0c6818466:公司之前已经有一套Universal Links了,但是在使用中遇到很奇怪的问题。部分手机在微信中的页面没法跳转到app内的指定页面,只会跳到下载App Store的下载页面。同样的机型和系统版本有的能跳,有的不能。开发这套的同事说是微信接口限制造成的,个人感觉这个不太靠谱,在测试中发现无法跳转的手机,使用外部浏览器也没法跳到app内。请问有遇到过这种情况么?谢谢
    kurt_wang:@炸天帮666二狗子
    很有可能是因为初次安装app时apple-app-site-association文件下载失败导致的,建议多次删除重装,并且确保服务器可用。
    另外一种可能是苹果抽风导致,笔者今年年初一碰到过一个蛋疼的问题,从中午一直到下午4点发现重复的删除重装,app也不会请求服务器的apple-app-site-association文件,过了4点之后就好了。当时因为时间特殊并没有深究到底是什么原因导致,建议你可以在删除重装时检测一下服务器的文件请求,确保安装app时apple-app-site-association文件请求下来了。
  • 皮皮他爸: 请问楼主现在ios10可以直接通过点击universal link唤醒吗?
    kurt_wang:@songxin 当然可以啊:sweat:
  • Mossion:楼主,请问一下,怎么把网页信息传递过来呢?比如正在浏览的商品信息之类的?
    Mossion:@kurt_wang 灰常感谢
    kurt_wang:在你的配置好的通用链接后面把你需要的参数配置上,然后在-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{} 方法里面获取。
  • Xiao呆不糊涂:请问作者大大,你是如何解决没有装app 的人跳转app store的。现在做项目卡在这个地方,望分享
    kurt_wang:@Xiao呆不糊涂 没有理解你描述的“很多app不是这么操作的”,这个场景。网易云音乐app分享歌曲到扣扣或者微信,当你点击收藏歌曲时跳转到app,他们是使用通用链接实现的。当然现在还有很多app并没有使用通用链接做跳转,而是右上角提示用户使用safari打开,使用safari打开之后,用户点击之后web会发送一个scheme链接的重定向,然后唤醒 app。而考虑到每多一次点击都有可能流失一部分用户,显然这种方式并没有通用链接方便。
    Xiao呆不糊涂:@kurt_wang 我看到大众点评用是用这个方法的,但是貌似有很多APP,并不是这么操作的,类似于网易云音乐~
    kurt_wang:把你的通用链接地址配置为你的app下载页呀,这样安装了app的就可以通过通用链接跳转到你的应用,而没有安装app的就会跳转到你的app下载页。然后就可以在下载页做跳转应用商店的操作啊。
  • 75a37ea71687:如果已经配置过Universal Links,那么在用户第一次安装app时,苹果会发送一个请求,请求你服务器上的apple-app-site-association文件。楼主,如果以后再添加一个domains,新添加的app会打开么?
    kurt_wang: 做了一个小测试,当Associated Domains添加新的 Domains的之后,在app再次启动的时候抓包发现,苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。
    也就是说Associated Domains发生改变的话,系统是会知道的。
    另外Domains的配置也可以使用通配符,例如:applinks:*.mywebsite.com
  • 75a37ea71687:楼主,可以加下企鹅号聊一下么
  • c32589584724:拉起来的APP右上角多了点内容呢,好像是那个链接地址,怎么能不显示呢?
    kurt_wang:@Beryl_yanyan 我试了一下[[UIApplication sharedApplication] openURL:url] ,不需要配置白名单就可以打开的。不配置白名单会影响[[UIApplication sharedApplication] canOpenURL:url]这个方法的返回值,但是openURL:方法仍然是能直接唤起其他app的呀。:grin:
    c32589584724:@kurt_wang 我是想通过这种方式拉起第三方APP,因为URL Scheme是从后台拿来的(多家不定的APP),无法配置在白名单里,可是这样拉起人家的APP右上角带着这个实在不好。比如积分墙任务列表拉起APP就没有哎,他们是怎么实现的呢?有这方面经验能交流交流吗
    kurt_wang:这个是苹果加上用于快速唤起safri的,应该是搞不掉。
  • 骑猪兜风_3355:请问一下,这个技术可以做渠道区分吗
    kurt_wang:@骑猪兜风_3355 可以给不同的渠道包配置不同的domain域呀
  • VitoTse:userActivityp 多了一个p
    kurt_wang:3q,已改。😂😂

本文标题:iOS9 Universal Links踩坑之旅,移动应用之de

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