iOS 配置universalLink 微信提示"未验证应用"

1,390 阅读3分钟

微信平台最近开始逐步对iOS 旧版本 SDK能力(版本号低于1.8.6.1)进行阶梯式调整: 1.2020年3月20日起对旧版本 SDK 发起的分享增加“未验证应用”安全提示 2.2020年6月1日起限制旧版本 SDK 使用微信分享、微信登录、打开小程序、一次性订阅消息等能力 SDK更新说明

解决以上两个问题需要更新微信SDK,新版SDK则需要配置universalLink

通用链接universalLink是iOS9推出的一项新功能,如果你的应用(app)支持通用链接universalLink之后,iOS用户能够在点击网页的链接的时候无缝的重定向到已经安装的app,不需要额外的任何操作。如果没有安装对应的app,那么点击链接会使用Safari打开网页。在iOS9以前,对于各种浏览器,Safari中唤醒app的需求,我们通常是只能使用scheme的方式。

Universal Link配置方法

1.配置 apple-app-site-association 文件

创建json文件,文件名必须为 apple-app-site-association不需要.json拓展名

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "teamID.bundleID",
        "paths": [ "*" ]
      }
    ]
  }
}

这里的 "appID"指的是TeamID+BundleId的组成,配置时用.拼接,TeamID和BundleId可以在开发者网站中找到

建议Universal Links配置path,例如/app/*, 避免全域命中Universal Links跳转 (在同一链接下配置多个app时必须配置path,否则会造成多app跳转混乱) 开发者中心

生成apple-app-site-association文件后,需将其上传到服务器App所用域名的.well-known的目录下或者根目录(路由显示应无.json拓展名)

  • iOS会先请求.well-known的域名
  • apple-app-site-association只会在APP第一次启动的时候请求一次,因此文件的任何更新的验证都需要APP重新安装或App Store更新

验证 apple-app-site-association 文件服务器是否配置生效

例设置的通用链接为https://www.example.com ,则使用浏览器访问路径 https://www.example.com/.well-known/apple-app-site-associationhttps://www.example.com/apple-app-site-association时,能够显示apple-app-site-association文件内的json数据则为服务器上传配置成功 成功示例

微信对Universal Links配置要求

  • Universal Links必须支持https
  • Universal Links配置的paths不能带query参数
  • 微信使用Universal Links拉起第三方App时,会在Universal Links末尾拼接路径和参数,因此App配置的paths必须加上通配符/* (因此微信对应的path则为"paths": [ "/*" ]

2.打开Associated Domains开关,将Universal Links域名加到配置上

在项目Signing&Capabilities中开启Associated Domains功能,并添加Universal Links 配置路径,以通用链接为https://www.example.com为例

  • 服务器必须支持SSL
  • Domains可以添加多个
  • Domains必须以applinks: 开头

Domains填写的网址为微信开放平台里APP开发信息中的Universal Links项,注意填写Domains时不需要https://的前缀

路径

3.APPDelegate中配置continueUserActivity(只更新微信SDK可忽略此步骤)
#pragma mark Universal Link
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        if ([url.host isEqualToString:@"公司域名"] ) {
            //打开对应页面
        }else{
            [[UIApplication sharedApplication]openURL:url];
        }
    }
    return YES;
}

Safari输入相关网址验证即可

通用链接常见问题


项目中微信相关配置

微信开放平台中配置好AppID ,AppSecretUniversal Links(注意项目中配置与开放平台中需配置相同,否则会报universal link校验不通过或"errcode" = 40125)

1)Info ->URL Types添加URL scheme为你所注册的appid scheme

2)Info.plist->LSApplicationQueriesSchemes 添加 weixin weixinULAPI LSApplicationQueriesSchemes

3)重写AppDelegateSceneDelegatecontinueUserActivity方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRest
oring>> * __nullable restorableObjects))restorationHandler {
    //此步骤没有配置或代理错误会造成contextId为空,微信无法成功回调
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}


- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return  [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [WXApi handleOpenURL:url delegate:self];
}

官方接入文档