UniversalLinks和Web Credentials配置

UniversalLink

WWDC2015上苹果公司为iOS9引入的一个新功能,即可通过点击指向网站的链接无缝重定向到已安装的应用。如果用户没有安装对应应用,则点击链接会在Safari中打开对应的网页。

一.配置步骤

(一).创建和上传关联文件

  • 创建一个 apple-app-site-association 文件,其中包含app可以处理的网址的JSON数据;
注意:
1.不要附加.json到apple-app-site-association文件名;
2.在iOS 9.3.1及更高版本中,该文件的未压缩大小不超过128KB;
数据格式示例:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "NOT /videos/wwdc/2015/*", "/videos/wwdc/201?/*"]
            },
            {
                "appID": "KKKKKKKKKK.com.XX.XXXXX",
                "paths": [ "*" ]
            }
        ]
    }
}
数据格式要求:
1.apps键必须存在并且所对应的必须是一个空数组;
2.details键对应一个字典数组,数组中字典的顺序决定了系统在查找匹配时所遵循的顺序,每个字典中包含appID键和paths键;
3.appID对应的值由<Team Identifier>.<Bundle Identifier>(登录开发者账号可查看ID);
4.paths对应域名中的path,是一个字符串数组,限制哪些路径可以唤醒应用,哪些路径不能唤醒应用;
5.指定路径的多种方法:
  a.如果要指定不作处理的链接,可以在路径字符串的开头添加 “ NOT ”(注意T后面要加空格);
  b.使用*指定整个网站;
  c.包含特定的URL,比如/wwdc/news/;
  d.拼接*到特定的URL,例如/videos/wwdc/2015/*,指定网站中的一部分;
  e.可以将两个通配符组合在一个路径中,可以使用?匹配任何单个字符,如/foo/*/bar/201?/mypage
6.注意:配置路径要区分大小写.
  • apple-app-site-association文件上传到HTTPS Web服务器(该步骤需要将写好的apple-app-site-association文件交给服务端人员,让他们完成上传过程。)。放在服务器的根目录或.well-known子目录中。https://<domain>/apple-app-site-associationor https://<domain>/.well-known/apple-app-site-association

(二). App IDs设置及项目中的配置

  • App IDs 设置
    进入开发者网站,找到对应的bundleId,可以点击Edit按钮,开启Associated Domains.

  • 应用配置
    在项目的Capabilities中开启Associated Domains,将apple-app-association所在域名配置进去,前缀必须为applinks: ,后面为服务器域名; 域名可以添加多个,限制30个以内; 要匹配关联域的所有子域,可以在指定域名的开头添加*.前缀;

applinks:xxx.xxx.com
  • 处理Universal Links
    当点击universal link后启动应用程序时,将会接收到一个activityType值为NSUserActivityTypeBrowsingWebNSUserActivity对象,其webpageURL属性包含正在访问的URL.
// 在AppDelegate中实现下面的方法,当使用Universal Links唤醒app时会执行此方法
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    if([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        
        //处理URL
        
    }
    return YES;
}

二. 配置验证及效果展示

当应用程序安装在iOS设备上时,系统会尝试从entitlement列出的域名中请求下载并验证关联文件。 验证可能会失败和关联将被拒绝的情况: 1.JSON文件无效或不包含应用程序标识符。 2.服务器返回300-499。 如果服务器返回500-599,系统假定该文件暂时不可用并再次尝试。默认情况下,系统每三小时重试一次,最多重试八次。

应用成功与域名关联后,它将保持关联状态,直到应用从设备中删除。在开发过程中,每次更新关联文件时都需要从测试设备中删除应用程序,以保证及时查看最新更改。

三.跨域问题

苹果官方文档:
When a user is browsing your website in Safari and they tap a universal link to a URL in the same domain as the current webpage, iOS respects the user’s most likely intent and opens the link in Safari. If the user taps a universal link to a URL in a different domain, iOS opens the link in your app.
For users who are running versions of iOS earlier than 9.0, tapping a universal link to your website opens the link in Safari.
在iOS9以上,当用户在Safari中浏览网站,点击与当前网页相同域名的URL的通用链接时,iOS会尊重用户最可能的意图,在Safari中打开链接。相反,iOS会在应用中打开该链接。对于运行9.0之前的iOS版本的用户,点击指向您网站的通用链接将在Safari中打开链接.

在safari中打开知乎链接,底部有个App内打开的按钮,点击之后直接打开了App,就是利用了UniversalLink的跨域问题,实际上点击此按钮之后打开的是oia.zhihu.com域名下的链接,知乎在oia.zhihu.comwww.zhihu.com域名下都配置了apple-app-site-association关联文件,如果初次下载app没有下载到关联文件的话,点击App内打开按钮,不会直接唤起app,会显示知乎的下载页面.

四.所有配置都正确但依然无法唤起App的解决方法

1.关闭代理;
2.清空safari缓存;
3.safari不要开启隐私模式;
4.重启手机;
5.重新安装App;

五.相关资料

苹果官方Universal Links配置介绍
2015 WWDC视频---Universal Links介绍及演示
Universal Link 前端部署采坑记

Web Credentials

WWDC17上,苹果发布了iOS11,其中有一项新功能是App密码自动填充,当用户填充用户名和密码时,在键盘的QuickType Bar(快速输入条)会给出候选的用户名与密码,使在应用上登录更容易。

用户在Safari登录网站时,通常会在iCloud钥匙串中保存用户名和密码。随后,用户可能会打开源于同一个开发者的应用程序来访问同一个帐户。使用webcredentials,应用可以访问为网站存储的证书,无需用户重新输入用户名和密码。用户还可以在应用内创建新帐户,更新密码或删除帐户,Safari会保存并使用这些修改。

一.配置步骤

(一).让键盘上方显示右侧带有🔑图标的QuickType bar.

创建QuickType bar需要在 UITextFieldUITextView 对象中设置对应的textContentType属性。在iOS11中, UITextContentType新增加了UITextContentTypeUsernameUITextContentTypePassword类型。

self.phoneNumTextField.textContentType = UITextContentTypeUsername;
self.passwordTextField.textContentType = UITextContentTypePassword;

在keychain中有密码存在时,iOS11的设备上将显示QuickType bar,用户点击🔑按钮后,会进行TouchID或者FaceID或者Password身份验证,随会显示所有保存的账号密码,用户可从中进行搜索和选择,点击相应的账号信息,就会自动填充。
但如果用户保存的密码很多,需要在列表中查找也并不很方便。我们需要在QuickType的候选区列出用户曾经在我们的网站保存过的密码。

(二).添加Associated Domains,将应用和网站链接关联在一起

前缀为webcredentials, webcredentials后填写我们网站的Domain,即我们要关联的域名。

webcredentials:xxx.xxx.com

(三).添加并上传关联文件(同UniversalLinks)

apps值对应的数据格式为<Team Identifier>.<Bundle Identifier>

{
   "webcredentials": {
       "apps": [    "D3KQX62K1A.com.example.DemoApp",
                    "D3KQX62K1A.com.example.DemoAdminApp" ]
    }
}

二.相关资料

Shared Web Credentials
2017 WWDC视频 --- 自动填充密码
设置App’s Associated Domains
自定义密码自动填充规则
iOS Security

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容