UniversalLinkselector

关于Universal links的一点总结

2020-07-21  本文已影响0人  问问你是谁

Universal links的来龙去脉就不说了,这里简单总结几点我认为比较容易让人困惑的事项,希望能给遇到困难的小伙伴们提供一点帮助。


2021-3-16更新:
如果你嫌配置这些东西太麻烦,用ShareSDK吧。它会帮你把这些东西都配置好,然后你复制它给你的链接直接用就好了,省去你研究格式的时间,也不用让后台帮你更新这个文件了。我底下写的这些东西你也就可以不看了...


先贴下苹果官方文档:点这里

一、 关于apple-app-site-association在服务器上的路径
上面这个文档里,苹果建议放在域名下的".well-known"文件夹里,比如:

https://<your-domain>/.well-known/apple-app-site-association

但从百度上的结果来看,".well-known"这个路径弄起来还挺麻烦的。所以还是推荐直接放在域名根目录底下,就是这样:

https://<your-domain>/apple-app-site-association

二、这个apple-app-site-association里面的json怎么写
上面文档推荐的格式是:

// 格式1
{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
             "components": [  // 相当于其他格式中的paths
               {
                  "/": "/buy/*",  // 具体的path
                  "comment": "Matches any URL whose path starts with /buy/"  // 注释
               },
               {
                  "/": "/help/website/*",
                  "exclude": true,  // 作用同其他格式具体path前面的那个"NOT"
                  "comment": "Matches any URL whose path starts with /help/website/ and instructs the system not to open it as a universal link"
               }
             ]
           }
       ]
   }
}

可是你在网上绝大多数的文章里看到的都是这样的格式:

// 格式2
{ 
 "applinks": {
     "apps": [],  // 空数组就好了
     "details": [ 
      {
          "appID": "ABCDE12345.com.example.app",
          "paths": [ "/universal_links_callback/*", "/qq_conn/666888666/*", "NOT /website/*" ]
      }
      ] 
    }
}

你可能还会看到第3种格式:

// 格式3,知乎就是这样的格式
{
    "applinks": {
        "apps": [],
        "details": {  // 和格式2相比,details变成了字典,原本显式的"appID"直接变成了key
            "ABCDE12345.com.example.app": {
                "paths": [
                    "/universal-links-callback/*",
                    "/qq_conn/666888666/*",
                    "NOT /website/*"
                ]
            }
        }
    }
}

看上去格式1比格式2、3更复杂点,但语义更清晰,可读性更高。"components"相当于其他格式中的"paths";"component"下的"exclude": true,相当于格式2、3中paths里具体path前的"NOT",意思是不把这个路径的链接当通用链接来处理。

按理这三种格式都是ok的。但是如果你用苹果最新推荐的“格式1”的话,当你在QQ互联中验证Universal link时会一直失败,会报一个大概意思是“在你的apple-app-site-association中找不到QQ相关的Universal link信息”的错误。微信是没问题的,因为微信不校验。

三、如果你用了友盟分享,还需要集成微信支付时的注意事项
第一个:pod友盟的精简版微信分享"ReducedWeChat",和最新的微信官方"WechatOpenSDK"

pod 'UMCShare/Social/ReducedWeChat'
pod 'WechatOpenSDK'

第二个:除了原本友盟的注册方法之外,你还需要再调用下微信sdk的注册方法。否则分享可以调起微信,但支付的时候调不起来。

// 原本友盟的注册方法
UMSocialGlobal.shareInstance()?.universalLinkDic = 
                                    [UMSocialPlatformType.wechatSession : universalLink_wx, 
                                    UMSocialPlatformType.QQ : universalLink_qq]
UMSocialManager.default().setPlaform(.wechatSession,
                                     appKey: WXAppId,
                                     appSecret: WXAppSecret,
                                     redirectURL: nil)
// 微信sdk的注册方法
WXApi.registerApp(WXAppId, universalLink: universalLink_wx)
上一篇下一篇

猜你喜欢

热点阅读