你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS QQ登錄 傻瓜式集成

iOS QQ登錄 傻瓜式集成

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



  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved