QQ登陸iOS SDK 封裝了QQ登陸的登陸受權以及大部分OpenAPI,應用只須要修改相應參數,不須要理解驗證受權流程,便可快速實現QQ登陸功能。c++
iOS平臺上(iPad,iPhone,iPod)的應用,請在申請appid,appkey後,使用QQ互聯提供的iOS SDK。sql
//申請網址 http://connect.qq.com網絡
請到SDK下載頁面下載最新版本QQ登陸iOS SDK。app
iOS SDK包中帶有兩個文件:異步
1. TencentOpenAPI.framework打包了iOS SDK的頭文件定義和具體實現。網站
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK須要的資源文件。ui
1. 將iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷貝到應用開發的目錄下。url
而後將TencentOpenAPI.framework從SDK的保存目錄拖拽到工程導航視圖(project navigator)中的Frameworks虛擬目錄下。spa
2. 在彈出的對話框中勾選「Create groups for any added folders」,去掉「copy items into destination group’s folder(if needed)」,在Add to targets中選擇要加入SDK的target以後點擊finish。完成以後就將iOS SDK的framework文件加入了開發工程中。code
3. 添加SDK依賴的系統庫文件。分別是」Security.framework」, 「libiconv.dylib」,「SystemConfiguration.framework」,「CoreGraphics.Framework」、「libsqlite3.dylib」、「CoreTelephony.framework」、「libstdc++.dylib」、「libz.dylib」。
4. 在Xcode中打開工程配置文件,選擇「Build Phases」一欄。
5.在「Build Phases」中選擇展開「Copy Bundle Resources」一欄,並點擊「+」圖標
6. 選擇「Add Other...」,進入iOS SDK文件所在目錄,選擇TencentOpenApi_IOS_Bundle.bundle,點擊回車或者點擊「Open」。
7. 修改必要的工程配置屬性。
在工程配置中的「Build Settings」一欄中找到「Linking」配置區,給「Other Linker Flags」配置項添加屬性值「-fobjc-arc」。
在XCode中,選擇你的工程設置項,選中「TARGETS」一欄,在「info」標籤欄的「URL type」添加一條新的「URL scheme」,新的scheme = tencent + appid。若是您使用的是XCode3或者更低的版本,則須要在plist文件中添加。Demo中咱們註冊的appid是222222。以下圖
另外在Xcode 6.0建立工程時,默承認能沒有單獨設置Bundle display name屬性值。可是由於SDK須要用到Bundle display name的值,因此務必請檢查確保這個屬性存在,若是沒有請添加上。
openURL:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuth HandleOpenURL:url];
}
handleOpenURL:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuth HandleOpenURL:url];
}
具體協議能夠參照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件
(1) 建立TencentOAuth並初始化其appid,demo爲222222。delegate爲實現TencentSessionDelegate的對象:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222", andDelegate:self];
這裏delegate不能爲空
(2) 初始化redirectURI(這裏須要填寫註冊APP時填寫的域名。默承認以不用填寫。建議不用填寫。demo中註冊時的地址是「www.qq.com」):
_tencentOAuth.redirectURI = @"www.qq.com";
(3)設置應用須要用戶受權的API列表。
(建議若是受權過多的話,可能會形成用戶不肯意受權。這裏最好只受權應用須要用戶賦予的受權。):
_permissions = [[NSArray arrayWithObjects:@"get_user_info", @"get_simple_userinfo", @"add_t", nil] retain];
1.登陸時,調用TencetnOAuth對象的authorize方法:
[_tencentOAuth authorize:_permissions inSafari:NO];
2. 登陸完成後,會調用TencentSessionDelegate中關於登陸的協議方法。
登陸成功:
@protocol TencentSessionDelegate <NSObject>
- (void)tencentDidLogin
{
_labelTitle.text = @"登陸完成";
if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length])
{
// 記錄登陸用戶的OpenID、Token以及過時時間
_labelAccessToken.text = _tencentOAuth.accessToken;
}
else
{
_labelAccessToken.text = @"登陸不成功 沒有獲取accesstoken";
}
}
非網絡錯誤致使登陸失敗:
@protocol TencentSessionDelegate <NSObject>
-(void)tencentDidNotLogin:(BOOL)cancelled
{
if (cancelled)
{
_labelTitle.text = @"用戶取消登陸";
}
else
{
_labelTitle.text = @"登陸失敗";
}
}
網絡錯誤致使登陸失敗:
@protocol TencentSessionDelegate <NSObject>
-(void)tencentDidNotNetWork
{
_labelTitle.text=@"無網絡鏈接,請設置網絡";
}
3. 登陸成功後,便可獲取到access token和openid。accessToken和 openid保存在TencentOAuth對象中。能夠經過相應的屬性方法直接得到。
[_tencentOAuth accessToken] ;
[_tencentOAuth openId] ;
特別提示:
1.因爲登陸是異步過程,這裏可能會因爲用戶的行爲致使整個登陸的的流程沒法正常走完,即有可能因爲用戶行爲致使登陸完成後不會有任何登陸回調被調用。開發者在使用SDK進行開發的時候須要考慮到這點,防止因爲一直在同步等待登陸的回調而形成應用的卡死,建議在登陸的時候將這個實現作成一個異步過程。
2.獲取到的access token具備3個月有效期,過時後提示用戶從新登陸受權。
3. 第三方網站可存儲access token信息,以便後續調用OpenAPI訪問和修改用戶信息時使用。若是須要保存受權信息,須要保存登陸完成後返回的accessToken,openid 和 expirationDate三個數據,下次登陸的時候直接將這三個數據是設置到TencentOAuth對象中便可。
得到:
[_tencentOAuth accessToken] ;
[_tencentOAuth openId] ;
[_tencentOAuth expirationDate] ;
設置:
[_tencentOAuth setAccessToken:accessToken] ;
[_tencentOAuth setOpenId:openId] ;
[_tencentOAuth setExpirationDate:expirationDate] ;
4. 建議應用在用戶登陸後,即調用getUserInfo接口得到該用戶的頭像、暱稱並顯示在界面上,使用戶體驗統一。