iOS Universal Links详细配置 适配微信sdk1.8.6以上版本

为了适配微信最新sdk, 最近搞了一下Universal Links, 好处就不多说了, 说一下如果不适配的坏处

  • 部分机型分享后显示"未验证应用"
  • 每次打包上传都有UIWebview使用有警告, 再不适配就上不了线了

微信sdk1.8.6.1 更新内容

  • UIWebview切换成WKWebview
  • 支持Universal Link拉起微信以及返回App

微信注册的方法只有下面这一个, 必须填写Universal Links, 所以只有搞一下Universal Links了

+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;

Universal Links配置

第一步 配置apple-app-site-association文件

  1. 创建名称为apple-app-site-association的json文件, 一定不能带后缀, 文件内容为
    官网例子
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

自己项目例子 按照微信写的appID以微信为例

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "HQH47S9JSQ.help.wechat.com",
                "paths": [ "/app/*" ]
            }
        ]
    }
}

内容解释

  • details: 是个数组, 可以配置多个app
  • appID: TeamID + '.' + BundleID, 看上面例子应该很好理解, TeamID在哪儿呢, 下面会提到.
  • paths: 域名后拼接的路径, 不能带query参数, 微信使用Universal Links拉起第三方App时,会在Universal Links末尾拼接路径和参数,因此App配置的paths必须加上通配符/*, 按照微信配置的例子, Universal Links就是https://help.wechat.com/app
  1. apple-app-site-association文件上传服务器
    服务器一定要支持https, 让服务端的同学把json文件上传到域名的根目录下或者.well-known目录下,苹果会优先去.well-known文件夹下找, 如果没有就去跟目录下载, 我们是两个地方都传了.
    https://xxx/apple-app-site-association
    https://xxx/.well-known/apple-app-site-association
    上传完成后, 点击上面的链接应该是下载json文件就对了, 打开看一下内容对不对, 一定是下载json文件, 不是直接打开

上传完成后可以先验证一下苹果验证工具, 输入https://xxx/.well-known/apple-app-site-association, 等出现下图提示就可以

链接验证

第二步 开启Associated Domains

  1. 登录公司的开发者账号, 找到Identifiers-->appId, 勾选Associated Domains
    下面有第一步要的TeamID

    Associated Domains1

    点击保存时会弹窗提示
    提示

    大概意思是,使用该appId的配置文件都会无效,必须重新生成, 所以只要用到该appId的文件都要重新配置, 下图看出, 重新配置的有推送证书pp描述文件, 配置完后下载更新.
    证书配置参考
    证书配置

  2. 打开Xcode 添加Associated Domains


    Associated Domains2

添加Universal Links


Associated Domains3
  • Domains: 内容为applinks:+域名, 例如上面的例子为applinks:help.wechat.com, 不用加/app/*

添加完后项目中会多一个.entitlements文件


.entitlements

--->到此Universal Links就配置完成了: https://help.wechat.com/app

第三步 验证Universal Links
验证方式找了两种

  1. 备忘录验证
    打开备忘录输入https://help.wechat.com/app点击会直接跳转自己的app, 或者长按会弹窗 在"app"中打开
  2. Safari浏览器验证
    在浏览器中输入https://help.wechat.com/app, 打开网站后一定要下拉, 会有类似这样的弹窗, 点击打开会直接跳转APP.
    Safari验证

第四步 微信配置Universal Links

  1. 微信要求填写格式是https开头,"/"结尾, 所以填写https://help.wechat.com/app/
    微信平台
  2. AppDelegate配置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 注册
    [WXApi registerApp:kWXAppID universalLink:kUniversalLinks];
    // 测试函数 step为WXULCheckStepFinal时,表示检测通过,Universal Link接入成功
    [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult * _Nonnull result) {
        NSLog(@"-> %ld %@",step, result);
    }];
}

// 通用链接会调用
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *webpageURL = userActivity.webpageURL;
        if ([webpageURL.absoluteString isEqualToString:kUniversalLinks]) {
            // 如果UniversalLinks跳转 会到这里
            NSLog(@"%@",webpageURL);
        } else {
            [[UIApplication sharedApplication]openURL:webpageURL];
        }
    }
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

注意点

  1. 如果什么都配置正确了, 还是调不起app, 就把app删除了重新安装一下.
  2. 如果什么都配置正确了, 分享到其他app里面就不跳转了, 是因为未跨域导致的, 如:分享到微信的链接是https://help.wechat.com/share.html, 然后该网页中的“在app内打开”按钮配置的通用链接为https://help.wechat.com/index.html.
    跨域的意思是说, 通用链接和调用通用链接的网页不能是同一域名. 即如果通用链接域名为help.wechat.com, 则通用链接所处的网页域名就不能是help.wechat.com。
  3. 如果所有都配置完成了, 微信分享登录都可以, 但是还会出现"未验证应用", 是因为未验证应用名单非实时更新,只有前一天有接入新SDK(1.8.6版本以上)并且有正确调用记录,第二天才会移除出名单, 并且前一天正确分享次数在10次以上.
  4. 添加测试函数checkUniversalLinkReady后,每次启动都会跳转微信,然后再跳回app,注释掉就不会再跳微信了。

微信接入文档
未验证应用排查文档
苹果官网Universal Links

如果对你有所帮助请点个赞呗👍