一,iOS SDK 下載 請到SDK下載頁面下載最新版本QQ登錄iOS SDK。 二,iOS SDK目錄結構 iOS SDK包中帶有兩個文件: 1. TencentOpenAPI.framework打包了iOS SDK的頭文件定義和具體實現。 2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的資源文件。 三,將iOS SDK文件添加到工程中 1. 將iOS SDK中的TencentOpenAPI.framewZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcmu6zVRlbmNlbnRPcGVuQXBpX0lPU19CdW5kbGUuYnVuZGxlzsS8/r+9sbS1vdOm08O/qreitcTEv8K8z8KhowrIu7rzvatUZW5jZW50T3BlbkFQSS5mcmFtZXdvcmu001NES7XEsaO05sS/wrzNz9entb25pLPMtby6vcrTzbyjqHByb2plY3QgbmF2aWdhdG9yo6nW0LXERnJhbWV3b3Jrc9DpxOLEv8K8z8Khowo8aW1nIHNyYz0="/uploadfile/Collfiles/20141126/20141126084353137.png" alt="\"> 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.Framewor k”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。 在Xcode中打開工程配置文件,選擇“summary”一欄。 4. 在“summary”中選擇“Linked Frameworks and Libraries”一欄,點擊“+”圖標。 5. 直接在默認庫文件中選擇後點擊“Add”添加“SystemConfiguration.framework”為例 6. 返回後看到“SystemConfiguration.framework”已經在“Linked Frameworks and Libraries”中出現。 7. 在Xcode中打開工程配置文件,選擇“Build Phases”一欄。 8. 修改必要的工程配置屬性。 在工程配置中的“Build Settings”一欄中找到“Linking”配置區,給“Other Linker Flags”配置項添加屬性值“-fobjc-arc”。 四,修改必要的代碼 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]; 五,調用SDK登錄 1.登錄時,調用TencetnOAuth對象的authorize方法: [_tencentOAuth authorize:_permissions inSafari:NO]; 2. 登錄完成後,會調用TencentSessionDelegate中關於登錄的協議方法。 登錄成功: @protocol TencentSessionDelegate- (void)tencentDidLogin { _labelTitle.text = @"登錄完成"; if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]) { // 記錄登錄用戶的OpenID、Token以及過期時間 _labelAccessToken.text = _tencentOAuth.accessToken; } else { _labelAccessToken.text = @"登錄不成功 沒有獲取accesstoken"; } } 非網絡錯誤導致登錄失敗: @protocol TencentSessionDelegate -(void)tencentDidNotLogin:(BOOL)cancelled { if (cancelled) { _labelTitle.text = @"用戶取消登錄"; } else { _labelTitle.text = @"登錄失敗"; } } 網絡錯誤導致登錄失敗: @protocol TencentSessionDelegate -(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接口獲得該用戶的頭像、昵稱並顯示在界面上,使用戶體驗統一。