周末刚帮朋友做完一个社交类App,何i获发现很多开发者对微信登录的设备上实授权具体实现存在疑问。今天咱们就泡杯咖啡,现微信登聊聊在iOS设备上实现微信登录的录并那些事儿。
一、何i获开工前的设备上实授权准备
就像做菜要先备料,接入微信登录需要三个关键材料:
- 开发者账号:去微信开放平台注册(别用个人订阅号)
- 移动应用创建:填写Bundle Identifier时要和Xcode里完全一致
- AppKey套装:拿到AppID和AppSecret时,现微信登记得用记事本存好
材料类型 | 获取渠道 | 有效期 |
AppID | 开放平台控制台 | 永久 |
AppSecret | 开发者密码管理 | 需定期重置 |
1.1 SDK的录并安装姿势
CocoaPods用户可以在Podfile里加这句:
pod 'WechatOpenSDK'
手动集成的朋友要注意:要把libWeChatSDK.a和头文件拖进项目,记得勾选Copy items if needed。何i获
二、设备上实授权工程配置的现微信登玄机
在Xcode里折腾这几个地方时最容易出错:
- 在Info标签页添加URL Types,建议Scheme写成
wx+AppID
- Info.plist里要加白名单:
- weixin
- weixinULAPI
配置项 | 示例值 | 注意事项 |
URL Schemes | wx123456789 | 必须全小写 |
LSApplicationQueriesSchemes | weixin,录并 weixinULAPI | iOS 9+必须配置 |
2.1 初始化三部曲
在AppDelegate里这么写最稳妥:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) ->Bool {
WXApi.registerApp("wx123456789", universalLink: "https://yourdomain.com/universal_link/")
return true
三、登录按钮的何i获智慧
建议在点击事件里这样处理:
@IBAction func wechatLoginTapped {
let req = SendAuthReq
req.scope = "snsapi_userinfo
req.state = "魔法咒语
WXApi.send(req) { success in
if !success {
print("微信客户端版本太旧了")
参数 | 作用 | 隐藏技巧 |
scope | 授权范围 | snsapi_base静默授权 |
state | 防CSRF攻击 | 可传随机字符串 |
四、回调处理的设备上实授权艺术
在AppDelegate里补上这个关键方法:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) ->Bool {
return WXApi.handleOpen(url, delegate: self)
4.1 处理授权响应
实现WXApiDelegate协议时要注意:
func onResp(_ resp: BaseResp) {
if let authResp = resp as? SendAuthResp {
switch authResp.errCode {
case 0:
let code = authResp.code ??
print("拿到code啦:\\(code)")
case -4:
print("用户点了取消")
default:
print("其他错误:\\(authResp.errStr ?? "")")
记得测试下网络不稳定时的情况,比如地铁里信号弱的现微信登环境。最后把获取到的code传给自家服务器,后续的access_token获取就交给后端处理吧。