Universal links 是苹果在WWDC上提出的iOS9的新特性之一。当你支持Universal links时,iOS用户可以点击网站链接,无缝重定向到已安装的APP,而无需通过Safari。如果APP没有安装的话,点击链接会在Safari中打开。
iOS中的通用链接
Universal Link
是Apple
在WWDC
上提出的iOS9
的新特性之一;能够方便的通过打开一个HTTPS
链接来直接启动您的客户端应用,当然前提条件是您必须在手机上安装了此App
;
在Universal Link
之前,我们通常使用URL Scheme
的方法实现web-App
的方式进行跳转;相比于URL Scheme
方式,Universal Link
提供了极佳的用户体验;
关于更多的介绍,可以查阅Universal Link官方介绍
应用场景
使用Universal Link
可以让用户在Safari
浏览器或者其他App
的WebView
中拉起相应的App
,也可以在App
中使用相应的功能,从而把用户引流到App
中;比如我们购物时,在Safari
浏览器中进入淘宝网页点击打开手机淘宝
则会直接使用Universal Link
来拉起淘宝App
;
Universal Link优点
- 唯一性:与自定义的
URL Scheme
相比,Universal Link
使用的是标准的HTTPS
协议链接到您的站点,所以一般不会被其他的App
所声明;自定义的URL Scheme
在没有安装应用的情况下是无法直接打开的,在Safari
中还会出现一个不可打开的弹窗;而使用了标准HTTPS
协议的Universal Link
链接则具备更好的兼容性; - 安全:如果用户的手机上安装了您的应用,那么系统回去您配置的网站上下载您上传的文件
apple-app-site-association
,在这个文件中标明了当前的Universal Link
的链接能够打开哪些App
;因为只有开发着自己才有权限在网站的根目录
上传此文件,所以网站与App
之间的关联是安全的; - 可变:如果用户的手机上没有安装您的应用,那么不必担心,
Universal Link
依然能够工作;如果你愿意,在没有安装你的App
的时候,用户点击链接,将会在Safari
浏览器中展示你网站的内容; - 简单:作为
Universal Link
使用的HTTPS
链接,可以同时作用于网站
和App
; - 私有:其他
App
可以在不需要知道你的App
是否安装了的情况下与你的App
相互通信;
Universal Links 配置
微信登陆相关文档
iOS接入指南 点击访问
apple-app-site-association 的配置
地址:https://cdnminigame.lightlygame.com/.well-known/apple-app-site-association
我这里 根目录也放了一份:https://cdnminigame.lightlygame.com/apple-app-site-association
两边内容如下 :
上传指定文件:创建一个文件,名为apple-app-site-association
,注意,文件名必须固定为apple-app-site-association
,没有后缀,没有后缀,没有后缀;其内容为json
格式
1 | { |
appID的组成方式为:
Team ID.your app’s bundle identifier;
NKF6VH268U为Team ID
com.lark.snake.official 为bundle identifier
地址:
1 | https://cdnminigame.lightlygame.com/apple-app-site-association |
微信公众平台设置
注意事项:Universal Links 地址后必须有/字符 后面微信要拼接其他参数使用
Xcode配置
Associated Domains设置
- 如果没有 Associated Domains 需要新添加一个
1 | applinks:cdnminigame.lightlygame.com |
URL Types 设置
LSApplicationQueriesSchemes 添加
1 |
|
手机验证 (必须ios手机)Safari浏览器
1 | https://cdnminigame.lightlygame.com/appsnake/ |
登陆相关
JSHelper.h
1 | // |
JSHelper.mm
1 | // |
WeChatHelper.h
1 | // |
WeChatHelper.m
1 | // |
AppController.mm
1 | /**************************************************************************** |
AppWeChatHelper.ts
1 | import { AppConstant, AppEventType, AppLoginCallBackType, AppLoginType, AppPayTrackType } from "./AppConstant"; |
AppConstant.ts
1 | import { proto } from "Proto"; |
以上就是相关的代码文件修改。
相关问题
调用自检函数
1 | //初始化微信appid,appsecret |
输出如下:
1 | 2024-10-09 16:20:29.176579+0800 asnake-mobile[2694:508576] WeChatSDK : 贪吃蛇无尽大作战 wx6942656f257f4644 |
关闭自检函数
报错如下:
1 |
总结
这是一个重要的提示信息,通常意味着微信已经成功启动你的应用,但有一些可能存在的问题需要注意:
1. 确保 Apple Developer 网站上的配置正确
确保在 Apple Developer 上的 App ID 中启用了 “Associated Domains” 功能。
在 Associated Domains 中,添加 Universal Link 配置,例如:
1
applinks:cdnminigame.lightlygame.com
这里的
cdnminigame.lightlygame.com
应该替换为你自己的服务器域名。
2. 检查 Associated Domains 配置
在 Xcode 的
Capabilities
选项卡中,启用 Associated Domains,并确保正确添加了对应的域名:1
applinks:cdnminigame.lightlygame.com
该域名必须与微信开放平台中的配置保持一致。
3. 检查 AASA 文件的正确性
你需要确保你的服务器上存在一个正确的
apple-app-site-association
(AASA) 文件。AASA 文件通常位于服务器的根目录或
.well-known
目录下。例如:https://cdnminigame.lightlygame.com/.well-known/apple-app-site-association
AASA 文件的内容应该包括对你的应用的相关配置,例如:
1
2
3
4
5
6
7
8
9
10
11{
"applinks": {
"apps": [],
"details": [
{
"appID": "<TeamID>.<BundleID>",
"paths": [ "/appsnake/*", "/" ]
}
]
}
}确保
<TeamID>
是你的 Apple Developer 账户的团队 ID,<BundleID>
是你的应用的包名。
4. 检查 Universal Link 是否正常工作
- 使用 iOS 设备上的 Safari 浏览器访问你的 Universal Link,确认它能够正确打开应用。如果应用未被正确打开,可能是 AASA 文件配置有问题。
- 你可以使用苹果提供的调试工具,来检查你的域名和 AASA 文件是否被正确解析:
- 访问 Apple Universal Links Validator 或类似的工具,输入你的域名,检查 AASA 文件的有效性。
5. 检查微信开发者后台配置
- 确保在 微信开放平台 后台的 iOS 应用配置中,正确填写了 Universal Link 地址。
- 微信后台中的 Universal Link 必须和 Xcode 中 Associated Domains 的域名保持一致。
6. 强制重新安装应用
- 如果你已经修改了 Universal Link 的配置,强烈建议将应用删除后重新安装,因为 iOS 会缓存旧的 Universal Link 配置。
- 删除应用后重新安装通常会刷新缓存,确保最新的 Universal Link 配置被正确应用。
7. 调试信息的解释
- 微信 SDK 提示
"Universal Link check passed"
,表示部分检查通过,但是"The application is launched by WeChat via Universal Link"
表示应用是通过 Universal Link 启动的,这可能意味着配置存在某些不匹配。 - 确保应用启动时从微信 SDK 返回的
result
和suggestion
信息也是显示成功的。
总结
这个问题通常是由于 Universal Link 的配置不完整或错误导致的。请按照以下步骤排查:
- 检查 Apple Developer 配置和 Xcode 中的 Associated Domains 是否正确。
- 确保服务器上的 AASA 文件正确配置,并且可以从外网访问。
- 检查微信开放平台的配置,确保所有配置项一致。
- 使用调试工具验证 AASA 文件,确保它被正确解析。
- 重新安装应用以刷新设备的缓存。
这些步骤应该可以帮助你排查和解决 Universal Link 的问题,使微信登录功能正常工作。
其他问题
使用微信授权返回到游戏时,在走完onResp:方法后,控制台会打印WeChatSDK: wxlog:Error:set token fail, errCode:4, errLog:wx token[] or contextId[(null)] is nil
按照文档自检方法,检查结果都是正常的:All Check Passed!
我今天也遇到了问题,在社区论坛搜了类似问题都没有收获,就在绝望之际 看到了这个
官方升级的 ReadMe文件
SDK1.9.9
- 授权登录支持关闭自动授权
- 分享支持添加签名,防止篡改
因 查看日志发现,其实返回了 code 但是 微信唤起的时候 一闪而过,有返回code 但是和前些年接入的时候交互不同,于是就在代码搜索 自动 搜到了这个:
1 | /** 是否关闭自动授权 |
于是思考 是否是因为 默认启动了 自动授权呢?于是登陆逻辑修改为
1 | //构造SendAuthReq结构体 |
然后就看到了 选择 取消、拒绝,登陆按钮的页面了!!!
很奇怪,微信这么大的改动,接入文档里居然没有提及,让我耗费了几个小时一直以为是自己哪里接入错误了!
修改Universal Link
最近项目更换了CDN地址 于是就要修改登录文件的位置 按照下面步骤修改可以更换,特别是代码内的地址,容易忽略掉
新的cdn 存放文件 名为apple-app-site-association
没有后缀 记得
1 | { |
微信开放后台修改Universal Link
Xcode修改配置
微信SDK相关代码修改域名
1 | //初始化微信appid,appsecret |
域名验证通过
1 | https://tcs-cdn.galsanggame.com/appsnake/ |
相关验证地址:https://branch.io/resources/aasa-validator/
清理打包验证
可以正常唤起微信登录