Universal Link(通用链接)是苹果在iOS9推出的,一种能够方便的通过传统HTTPS链接来启动APP的功能,可以使用相同的网址打开网址和APP。

看起来就是一条普通的https链接,当然是我们在该链接域名根目录配置过的一个链接,也可以在该链接中放置对应的H5页面。当用户的点击该链接,只要手机中安装了支持该链接的APP就会直接进入到APP中。如果没有安装APP则会跳转到Safari浏览器中,展示H5页面。对用户来说则是一个无缝跳转的过程。

  • 在苹果开发者账号打开Associated Domains配置

iOS接入微信登陆 iphone5c登录微信_ios

  • 在xcode打开Associated Domains开关,将Universal Links域名加到配置上

iOS接入微信登陆 iphone5c登录微信_objective-c_02

如果没有Associated Domains选项,点击上方的+Capability添加。

  • 配置URL Types

iOS接入微信登陆 iphone5c登录微信_ios_03

 

把微信的appID添加为url scheme

  • 配置LSApplicationQueriesSchemes

打开plist的LSApplicationQueriesSchemes,添加微信的scheme

<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>wechat</string>
		<string>weixin</string>
		<string>weixinULAPI</string>
	</array>
  • 配置apple-app-site-association文件

创建一个空白文件(必须纯文本,命名为apple-app-site-association,去除后缀名)

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "teamID.bundleID",
                "paths": [ "*" ]
            }
        ]
    }
}
  • 后台服务器配置

把文件apple-app-site-association,放置在服务器的根目录或者.well-known的子目录下,然后让服务端提供一个https的url地址,格式是“正式域名/apple-app-site-association”,如:https://www.demo.com/apple-app-site-association。

用浏览器打开这个地址,可以下载这个文件。用GET请求这个地址,返回文件的JSON内容。

  • 微信开放平台配置

配置好bundleID和universalLink

iOS接入微信登陆 iphone5c登录微信_iOS接入微信登陆_04

如果后台提供的url地址是 https://www.demo.com/apple-app-site-association。那么 Associated Domains 中填写applinks:www.demo.com

微信后台的Universal Links填写https://www.demo.com/

  • iOS初始化微信的代码
[WXApi registerApp:APP_ID universalLink: UNIVERSAL_LINK];

重写AppDelegate中的事件

- (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];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    return [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

如果无法调起微信分享和登录,可以打开日志查看Universal Links的校验情况

[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
    NSLog(@"checkUniversalLinkReady:%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
}];
[WXApi startLogByLevel:WXLogLevelNormal logBlock:^(NSString * _Nonnull log) {
    NSLog(@"WXApi-->%@", log);
}];

checkUniversalLinkReady如果走到第五步成功,则表示Universal Links配置正确。

checkUniversalLinkReady:5, 1, Universal Link check passed. The application is launched by WeChat via Universal Link,
checkUniversalLinkReady:6, 1, All Check Passed!,

WXULCheckStep值说明:

  1. step = WXULCheckStepParams: 参数检查
  2. step = WXULCheckStepSystemVersion: 当前系统版本检查
  3. step = WXULCheckStepWechatVersion: 微信客户端版本检查
  4. step = WXULCheckStepSDKInnerOperation: 微信SDK内部操作检查
  5. step = WXULCheckStepLaunchWechat: App拉起微信检查
  6. step = WXULCheckStepBackToCurrentApp: 由微信返回当前App检查
  7. step = WXULCheckStepFinal: 最终检查

上线时需要把checkUniversalLinkReady注释掉,否则每次初始化微信SDK时都会跳转微信正在连接页面。

 

如果提示“checkUniversalLinkReady:5, 0, Universal Link check failed. The application is launched by WeChat via scheme, Common problems self-check guide...”,是因为Universal Link校验不通过。

排查以下原因:

  1. 工程配置associated domain未打开或未添加Universal links域名
  2. 配置文件未上线或未按苹果要求放在服务器指定的路径下(域名根目录)
  3. 配置文件的Universal links的path末尾没有加通配符*
  4. 配置文件的appID(teamID+bundleID)与实际代码和微信开放平台配置的bundleID不匹配

注意:不能连续调用微信分享接口,否则会提示“由于应用安全校验不通过,无法完成微信分享”,混淆了错误,很坑。

iOS接入微信登陆 iphone5c登录微信_objective-c_05