现在很多APP或者网站都支持使用QQ帐号进行登录。本文演示如何实现QQ的第三方登录,以及登录后的获取用户的个人信息。
1,腾讯开放平台注册,以及SDK的配置(这个可以官方去找)
2,登录授权,并获取用户资料信息
(1)点击“登录并获取用户资料”按钮
(2)程序会自动跳转到QQ,显示登录页面(页面上会显示需要的授权)
(3)登录成功后又会自动返回原来的APP。本样例中我们在登录成功后,获取用户信息并打印出来
附:返回参数说明
参数名称 | 描述 |
---|---|
ret | 返回码。详见公共返回码说明#OpenAPI V3.0 返回码。 |
msg | 如果错误,返回错误信息。 |
is_lost | 判断是否有数据丢失。如果应用不使用cache,不需要关心此参数。
0或者不返回:没有数据丢失,可以缓存。 |
nickname | 昵称。 |
gender | 性别。 |
country | 国家(当pf=qzone、pengyou或qplus时返回)。 |
province | 省(当pf=qzone、pengyou或qplus时返回)。 |
city | 市(当pf=qzone、pengyou或qplus时返回)。 |
figureurl | 头像URL。详见:前端页面规范#6. 关于用户头像的获取和尺寸说明。 |
openid | 用户QQ号码转化得到的ID(当pf=qplus时返回)。 |
qq_level | 用户QQ等级(当pf=qplus时返回)。 |
qq_vip_level | 用户QQ会员等级(当pf=qplus时返回)。 |
qplus_level | 用户Q+等级(当pf=qplus时返回)。 |
is_yellow_vip | 是否为黄钻用户(0:不是; 1:是)。
(当pf=qzone、pengyou或qplus时返回) |
is_yellow_year_vip | 是否为年费黄钻用户(0:不是; 1:是)。
(当pf=qzone、pengyou或qplus时返回) |
yellow_vip_level | 黄钻等级,目前最高级别为黄钻8级(如果是黄钻用户才返回此参数)。
(当pf=qzone、pengyou或qplus时返回) |
is_yellow_high_vip | 是否为豪华版黄钻用户(0:不是; 1:是)。
(当pf=qzone、pengyou或qplus时返回) |
is_blue_vip | 是否为蓝钻用户(0:不是; 1:是)。
(当pf=qqgame或3366时返回) |
is_blue_year_vip | 是否为年费蓝钻用户(0:不是; 1:是)。
(当pf=qqgame或3366时返回) |
blue_vip_level | 蓝钻等级(如果是蓝钻用户才返回此参数)。
(当pf=qqgame或3366时返回) |
3366_level | 3366用户的大等级。
(当pf=3366时返回) |
3366_level_name | 3366用户的等级名,如小游游、小游仙。
(当pf=3366时返回) |
3366_grow_level | 3366用户的成长等级。
(当pf=3366时返回) |
3366_grow_value | 3366用户的成长值。
(当pf=3366时返回) |
is_super_blue_vip | 是否是豪华蓝钻。
(当pf=qqgame或3366时返回) |
(4)样例代码:
import UIKit
class ViewController: UIViewController, TencentSessionDelegate{
var _tencentOAuth:TencentOAuth!
override func viewDidLoad() {
super.viewDidLoad()
_tencentOAuth = TencentOAuth.init(appId: "1105212016", andDelegate: self)
}
//登录按钮点击
@IBAction func login(sender: AnyObject) {
//设置权限列表
let permissions = ["get_user_info","get_simple_userinfo"];
//登陆
_tencentOAuth.authorize(permissions)
}
//登陆完成调用
func tencentDidLogin() {
if !_tencentOAuth.accessToken.isEmpty {
print("----------------------------------------")
print("登录成功!")
print("openId:\(_tencentOAuth.openId)",
"accessToken:\(_tencentOAuth.accessToken)",
"expirationDate:\(_tencentOAuth.expirationDate)")
print("开始获取用户资料")
_tencentOAuth.getUserInfo()
}else {
print("登录失败!没有获取到accessToken")
}
}
/**
* 登录失败后的回调
*/
func tencentDidNotLogin(cancelled:Bool) {
if cancelled {
print("用户取消登录!")
}else{
print("登录失败!")
}
}
/**
* 登录时网络有问题的回调
*/
func tencentDidNotNetWork() {
print("没有网络,无法登录!")
}
/**
* 取得用户信息的回调
*/
func getUserInfoResponse(response:APIResponse) {
print("----------------------------------------")
print("用户资料获取成功:")
print(response.jsonResponse)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
3,退出登录
要退出登录、取消授权。只需要调用 TencentOAuth 对象的 logout() 方法即可。
_tencentOAuth.logout(self)