iOS微信授权登录添加Universal Link支持

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

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

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

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

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

  • 配置URL Types

 

把微信的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

如果后台提供的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不匹配

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

 

### 配置微信开发者Universal LinkiOS平台 #### 准备工作 为了使应用程序能够通过微信分享链接并成功启动,需确保已集成最新版的微信SDK。自1.8.6版本起,官方推荐采用Universal Link方式进行页面跳转验证[^1]。 #### 设置Associated Domains 在Xcode项目设置中启用“Associated Domains”,并向其添加`applinks:`前缀加上自己的域名,例如对于`https://example.com`应填写为`applinks:example.com`[^4]。 #### 创建Apple App Site Association (AASA) 文件 该JSON文件用于声明哪些URL路径可以被特定的应用程序处理。放置于服务器根目录下名为`.well-known/apple-app-site-association`的位置,并确保可通过HTTPS访问。内容结构如下所示: ```json { "applinks": { "apps": [], "details": [ { "appID": "{Team ID}.{Bundle Identifier}", "paths": ["/path/to/resource/*"] } ] } } ``` 其中`{Team ID}`代表苹果开发者账号团队标识符;而`{Bundle Identifier}`则是应用包名。针对具体需求调整`/path/to/resource/*`部分来限定可触发APP打开的具体网页地址范围。 #### Xcode中的配置 还需在项目的Entitlements文件里加入相应的关联域权限声明,即`com.apple.developer.associated-domains`键值对,同样指向之前提到过的`applinks:yourdomain.com`形式字符串列表。 完成上述步骤后,在实际测试过程中如果遇到任何问题,建议参考官方提供的常见问题排查指南以获取帮助[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值