iOS 第三方qq登錄獲取我的信息

 

QQ登陸iOS SDK 封裝了QQ登陸的登陸受權以及大部分OpenAPI,應用只須要修改相應參數,不須要理解驗證受權流程,便可快速實現QQ登陸功能。c++

iOS平臺上(iPad,iPhone,iPod)的應用,請在申請appid,appkey後,使用QQ互聯提供的iOS SDK。sql

//申請網址 http://connect.qq.com網絡

1. iOS SDK 下載

請到SDK下載頁面下載最新版本QQ登陸iOS SDK。app

2. iOS SDK目錄結構

iOS SDK包中帶有兩個文件:異步

1. TencentOpenAPI.framework打包了iOS SDK的頭文件定義和具體實現。網站

2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK須要的資源文件。ui

 

3. 將iOS SDK文件添加到工程中

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」。

 

 

4. 修改必要的代碼

4.1 修改工程配置文件

在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的值,因此務必請檢查確保這個屬性存在,若是沒有請添加上。

 

4.2 重寫AppDelegate 的handleOpenURL和openURL方法

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];

}

4.3 在代碼中實現TencentSessionDelegate協議中的方法

具體協議能夠參照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件


4.4 初始化iOS SDK API數據對象TencentOAuth。


(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];

5. 調用SDK登陸

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接口得到該用戶的頭像、暱稱並顯示在界面上,使用戶體驗統一。

相關文章
相關標籤/搜索