在微信里点击拉起APP到特定页面---Apple Universal Link的摸索

       我们在微信里查看新闻类APP比如网易新闻、今日头条的文章时,会看到类似于“在APP里查看更多评论”、”在APP里查看原文”的按钮功能,如果用户安装了相应的APP,点击后离开微信,在APP里打开原文。

       我们也想做这个需求。安卓貌似没有如此完美的功能可实现。调研了苹果的Universal Link。它是iOS系统级的,不受微信的限制,可以很好的符合我们的需求。

       

       前提准备: iOS系统9.0及以上、在AppStore有已上线应用

       官方文档: https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

       具体实现需要后台和iOS开发人员两方面配合实现。

       后台方面: 

      1.  新建一个文件,名为apple-app-site-association,无后缀。内容如下

{
  "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "A2D7CUJ888.com.mydomain.Star",
                "paths": ["*"]
            }
        ]
    }
}

  2. 我们想要在APP里打开的页面或者Action,域名选定的static.mydomain.com这个子域名。是将此文件扔到服务器域名解析的根目录下。即 http://static.mydomain.com/apple-app-site-association  是能访问的,会将此文件下载到本地。

       这还不够。我们需要https://static.mydomain.com/apple-app-site-association,而不是http。

       之前我们nginx配置是有配置ssl的。然后自己生成的证书。自己生成证书的过程见我另一篇文章。然而自己生成的证书,是未受信任的。用curl -ihttps://static.mydomain.com/apple-app-site-association  会报错误。于是我们需要申请机构认证的证书。

       公司的服务器使用的腾讯云。我想阿里云等其他服务商也有代理申请ssl证书的功能。

       https://www.qcloud.com/document/product/400/6814

      在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第1张图片在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第2张图片

      我们域名是在万网解析的。因此我们选择手动DNS验证。按指引到万网添加 一条类型为TXT的解析 

      申请下来后,得到用于Nginx配置的两个加密文件XXX.crt和YYY.key

      可以配置Nginx了

      在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第3张图片

          我的apple-app-site-association文件就是放到/data/apps/resource 下了。

       curl -i https://static.mydomain.com/apple-app-site-association

     在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第4张图片       

      在Universal Link官方文档里有关于检测该文件是否有效的地方。https://search.developer.apple.com/appsearch-validation-tool/

       输入文件的地址后

      在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第5张图片

      

 出现 Error no apps with domain entitlements错误。这个问题困扰我一天一夜。因为自己和iOS RD测试一直拉不起来我们的App,不走iOS的代理类。怀疑应该让这里pass才能往下继续测试。事实证明这里出现这个是可以的。之所以没有拉起app是其他地方还有坑。

  

   iOS方面

   首先就是要提供bundle ID和 team ID给我了。前面apple-app-site-association文件配置里appID的值就是teamID.bundleID

   在XCode的capabilities里添加App域名。我的就是static.mydomain.com了。格式为applinks:static.mydomain.com

   然后在代理类里对接收到请求的进行解析和处理了。

   

   然后我们 随便写了个地址 希望他能走进iOS项目调试信息。比如https://static.mydomain.com/ddd 没反应。后来想是不是应该这个地址是存在的才行,于是在服务器上配置了ddd.html文件。微信里点击访问https://static.mydomain.com/ddd.html同样也不行。

   最后一个大坑:还是不跳。在一篇文章里记得有提及页面的链接和跳转的链接的域名不能一样。于是我们试了下。在另一个项目(子域名t1.mydomian,com下建了测试文件。

在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第6张图片


在微信里首先打开这个页面,然后点击这些static子域名的链接。无论这个链接地址是不是404的,都成功了!!


这样以后就可以处理业务需求了。url里带action.cmd的,解析action参数,打开APP后按照既定的action跳转到各个native页, 不带的直接跳转链接对应的HTML5页。


 

 补充: 申请ssl证书时,云服务端有两种严重方式,一种是选择手动DNS验证,一种是添加指定内容到某个路径,供验证访问。第二种方式nignx配置如下:

在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第7张图片

然后将.well-known/pki-validation/fileauth.txt扔到这个目录下。

在微信里点击拉起APP到特定页面---Apple Universal Link的摸索_第8张图片

  

       

你可能感兴趣的:(JAVA)