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对应的值由.(登录开发者账号可查看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:///apple-app-site-associationor https:///.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值对应的数据格式为.

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

二.相关资料

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

你可能感兴趣的:(UniversalLinks和Web Credentials配置)