通常我们在跳转到其他app时使用的是scheme url的方式,但是现在在申请微信登录或者qq登录时,都开始要求设置Universal Links

这个功能是iOS9.0就推出的通过访问http链接去启动app的方式,相信你在刷知乎或者百度的时候,浏览器顶部一直会飘着用app打开这个,这个东西就是上面说的通用链接

比如我的需求是访问https://www.lazypig.net/app/lazypigquick/时,顶部飘窗,访问https://www.lazypig.net时不显示app打开飘窗

一、准备条件

拥有一个网站域名,且这个网站域名支持https

如果你没有这个东西,后面这个教程就不用看了,直接去使用mob推出的moblink吧,可以使用他默认的域名和配置,按他的接入教程就可以了。

二、xcode项目配置

1、打开工程配置中的Associated Domains

如果用的是xcode11,可以在Signing&Capabilities中添加Associated Domains,如果用的xcode10,那就在Capabilities中打开Associated Domains

截屏2019-10-17下午1.58.57.png

2、添加网站域名

网站域名以applinks:开头,那这里填写的就是applinks:www.lazypig.net

3、配置文件

如果你的项目时自动生成签名和配置文件,那么这步可以省略,如果项目不是自动生成的,就需要去苹果开发后台,将对应的appidAssociated Domains配置打开,然后重新生成一次打包的配置文件

1608265-fc8dfd8dbab131b6.png

三、网站配置

1、创建配置文件

新建一个名字为apple-app-site-association的纯文本文件,不要有任何后缀,文件内容为

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "团队ID.软件BundleID",
                "paths": [ "限制的域名"]
            }
        ]
    }
}

比如你团队ID是t123,app的bundle idcom.hudongdong.blog,只在
访问https://www.lazypig.net/app/lazypigquick/链接时才显示顶部的用app打开,其他网站层次不显示,那么这个文件的内容就是

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "t123.com.hudongdong.blog",
                "paths": [ "/app/lazypigquick/*"]
            }
        ]
    }
}

如果填了限制的paths,在其他网站例如微信后台,填写Universal Links就是填写https://www.lazypig.net/app/lazypigquick/,前端初始化填写的时候也是这个网址。如果没有限制paths,填写的是*,那么前端和后台填写的地址就是https://www.lazypig.net/

如果全站的头部都显示用app打开,那么paths修改为"paths": [ "*"]即可。

这个paths路径的更多限制规则可以参考下面

  1. 使用*指定整个网站
  2. 包含特定的网址(例如/wwdc/news/)以指定特定的链接
  3. 附加*到特定的网址(例如/videos/wwdc/2015/*)以指定网站的一部分
  4. 除了用于*匹配任何子字符串之外,您还可以?用于匹配任何单个字符。您可以将两个通配符合并在一个路径中,例如/foo/*/bar/201?/mypage。
  5. 路径字符串的开头添加NOT指定不应作为通用链接处理的区域,例如"paths": [ "/videos/wwdc/201?/*" , "NOT /videos/wwdc/2010/*"]

apps这个字段保持为空数组即可

details是指定哪个页面用哪个app打开的数组,如果你有多个路径指定不同的app,按照上面的paths规则添加对应的appIDpaths即可。

然后将这个文件上传到网站根目录,或者在根目录新建一个名字为.well-known的子目录,然后把这个文件上传到这个子目录中。

2、网站验证

上传之后,可以访问https://search.developer.apple.com/appsearch-validation-tool/,苹果专门提供的验证工具,然后将域名网址填进去,例如https://www.lazypig.net/,然后点击测试。

截屏2019-10-17上午11.02.34.png

下面如果显示的是Passed,那就证明符合规则,如果有不合规则的可以参考下面的修正

截屏2019-10-17上午11.03.58.png

3、网站不合规则的修正方法

3.1 Title不符合规则

在首页的header标签中增加<title>标签,

例如

<head>
    <title>胡东东博客</title>
    ……
</head>

3.2 Description不符合规则

在首页的header标签中增加description标签,

例如

<head>
    <meta name="description" content="胡东东博客,分享手游和app开发的日常点滴" />
    ……
</head>

3.3 Image不符合规则

在首页的header标签中增加og:image标签,

例如

<head>
    <meta property="og:image" content="https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super" />
    ……
</head>

3.4 Touch Icon不符合规则

在首页的header标签中增加apple-touch-icon标签,

例如

<head>
    <link rel="apple-touch-icon" href="/static/quick0012.png">
    ……
</head>

3.5 Link to Application Action required

这个基本是因为app还没有上架,上架审核通过之后发布即可

4、显示验证

可以打一个测试包安装到手机,然后用safari浏览器打开指定的网页即可看到飘窗,例如打开https://www.lazypig.net/app/lazypigquick/,就会看到懒猪时间盒的打开飘窗

四、网站向app传值

AppDelegate中,可以通过回调函数获取网站向app传的链接,通过链接做不同的逻辑处理

Swift

//从通用链接进来
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
            if let url = userActivity.webpageURL {
                print("从通用链接进入app",url.absoluteString)
            }
        }
        return true;
    }

OC

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        if (url是我们希望处理的)
        {
            //进行我们的处理
        }
    }
    return YES;
}

☟☟可点击下方广告支持一下☟☟

最后修改:2019 年 10 月 23 日
请我喝杯可乐,请随意打赏: ☞已打赏列表