周末刚帮朋友做完一个社交类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 Schemeswx123456789必须全小写
LSApplicationQueriesSchemesweixin,录并 weixinULAPIiOS 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获取就交给后端处理吧。