現在很多APP或者網站都支援使用QQ帳號進行登入。本文示範如何?QQ的第三方登入,以及登入後的擷取使用者的個人資訊。
1,騰訊開放平台註冊,以及SDK的配置(這個可以官方去找)
2,登入授權,並擷取使用者資料資訊
(1)點擊“登入並擷取使用者資料”按鈕
(2)程式會自動跳轉到QQ,顯示登入頁面(頁面上會顯示需要的授權)
(3)登入成功後又會自動返回原來的APP。本範例中我們在登入成功後,擷取使用者資訊並列印出來
附:返回參數說明
| 參數名稱 |
描述 |
| ret |
返回碼。詳見公用返回碼說明#OpenAPI V3.0 返回碼。 |
| msg |
如果錯誤,返回錯誤資訊。 |
| is_lost |
判斷是否有資料丟失。如果應用不使用cache,不需要關心此參數。
0或者不返回:沒有資料丟失,可以緩衝。
1:有部分資料丟失或錯誤,不要緩衝。
|
| 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)