iOS 微信打开第三方应用(Universal Links)

一、前言

iOS应用可以使用 URL Schemes(客户端协议) 进行应用间的跳转或实现网页打开应用的功能,这种跳转是协议跳转。

* 要应用间能跳转就要遵循URL Schemes协议。

* 要网页跳转应用网页就要遵循URL Schemes协议。

所以这就出现了微信或QQ等知名应用不能打开第三方应用的问题,不能打开是因为微信和QQ使用的是自己研发的QQ浏览器,他不遵循URL Schemes这个协议。

备注:
  * 关于URL Schemes更多了解,可参考传送门
      * yourdomain.com 就是你服务器的域名

二,需求场景

(1)第三方应用集成了友盟分享到QQ和微信的功能

(2)第三方应用分享了一个web页面到微信或QQ

(3)打开分享的web页面,点击上面的某一个按钮

(4)如果用户安装了该应用,直接打开应用根据web地址中的参数跳转到对应的页面

(5)如果用户没有安装应用,直接跳转到appStore

三,需求实现方案 

iOS9 之后提供的 Universal Links 功能
备注:了解更多Universal Links可参考

四,需求实现步骤

(1)创建一个json文件,名称必须为 apple-app-site-association,⚠️该文件不可带 .json 的后缀名

扫描二维码关注公众号,回复: 5314437 查看本文章

         apple-app-site-association 文件必须放在https服务器的根目录下,例:https://kahui.huankaun.com 这个路径下 ⚠️一定是根目录,也就是说该文件必须是一级目录,供下载使用

        *  apple-app-site-association 文件格式:

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

  1)appID :
    appID 格式为 teamID.bundleId形式,譬如说我的teamIDxxxxxxxxxxxbundleIdcom.mytest.app
    那么我的appID就是:xxxxxxxxxxx.com.mytest.app。  
      teamID:打开苹果官网,点击Account,点击左边栏的 Membership,查找teamID 

  2) 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为你的服务器域名。

  • 也可以使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 出现该提示为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,如下图:

   
项目配置

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

 
 
    注意 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,长按这个链接,出现下图提示则配置成功。

   当没有安装该应用时的处理方式是:上传该html文件到 kahui.huankaun.com 路径下,如下图:

<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title>上新-跳转中...</title>
 
</head>
<body>
<script type="text/javascript">
        setTimeout(function(){
            window.location = "第三方在应用宝的下载链接"
        },3000)
 
</script>
 
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/lxlx1798/p/10430588.html