iOS 第三方qq登陸獲取個人信息


 

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

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

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

1. iOS SDK 下載

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

2. iOS SDK目錄結構

iOS SDK包中帶有兩個文件:

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

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

 

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

1. 將iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷貝到應用開發的目錄下。

然后將TencentOpenAPI.framework從SDK的保存目錄拖拽到工程導航視圖(project navigator)中的Frameworks虛擬目錄下。

 

 

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文件加入了開發工程中。

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM