最近項目中須要實現微信登陸,記錄在這裏,以備之後須要.php
http://wiki.mob.com/簡潔版第三方登錄/ ios
第三方登陸,就是利用用戶在第三方平臺上已有的帳號來快速完成本身應用的登陸流程。這裏的第三方平臺,如新浪微博,QQ,微信,Facebook,Twitter等平臺。這裏咱們能夠登陸獲取相應的用戶信息和受權信息,例如uid,token等。用戶能夠獲取到信息用來作本身的操做。c++
如何在咱們的官網註冊應用獲得appkey,請點擊連接看裏面的操做步驟sql
請點擊這裏進去下載相應的sdk微信
第一步:將下載的SDK解壓後導入到您的工程中,見下圖app
拖到工程中後彈出如下對話框,勾選」Copy items into destination group’s folder(if needed)」,並點擊「Finish「按鈕, 如圖ui
注意:請務必在上述步驟中選擇「Create groups for any added folders」單選按鈕組。若是你選擇「Create folder references for any added folders」,一個藍色的文件夾引用將被添加到項目而且將沒法找到它的資源。google
第二步:添加依賴庫 添加步驟見下圖spa
必須添加的依賴庫以下(Xcode 7 下 *.dylib庫後綴名更改成*.tbd):code
libicucore.dylib
libz.dylib
libstdc++.dylib
JavaScriptCore.framework
如下依賴庫根據社交平臺添加:
新浪微博SDK依賴庫
ImageIO.framework
AdSupport.framework
libsqlite3.dylib
QQ好友和QQ空間SDK依賴庫
libsqlite3.dylib
微信SDK依賴庫
libsqlite3.dylib
短信郵件依賴庫
MessageUI.framework
Google+SDK依賴庫
CoreMotion.framework
CoreLocation.framework
MediaPlayer.framework
AssetsLibrary.framework
AddressBook.framework
第三步:設置ShareSDK的Appkey並初始化對應的第三方社交平臺 打開*AppDelegate.m(*表明你的工程名字)導入頭文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#import <ShareSDK/ShareSDK.h> #import <ShareSDKConnector/ShareSDKConnector.h>
//騰訊開放平臺(對應QQ和QQ空間)SDK頭文件 #import <TencentOpenAPI/TencentOAuth.h> #import <TencentOpenAPI/QQApiInterface.h>
//微信SDK頭文件 #import "WXApi.h"
//新浪微博SDK頭文件 #import "WeiboSDK.h" //新浪微博SDK須要在項目Build Settings中的Other Linker Flags添加"-ObjC"
//人人SDK頭文件 #import <RennSDK/RennSDK.h> |
在- (BOOL)application: didFinishLaunchingWithOptions:方法中調用registerApp方法來初始化SDK而且初始化第三方平臺
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /** * 設置ShareSDK的appKey,若是還沒有在ShareSDK官網註冊過App,請移步到http://mob.com/login 登陸後臺進行應用註冊, * 在將生成的AppKey傳入到此方法中。 * 方法中的第二個第三個參數爲須要鏈接社交平臺SDK時觸發, * 在此事件中寫入鏈接代碼。第四個參數則爲配置本地社交平臺時觸發,根據返回的平臺類型來配置平臺信息。 * 若是您使用的時服務端託管平臺信息時,第2、四項參數能夠傳入nil,第三項參數則根據服務端託管平臺來決定要鏈接的社交SDK。 */ [ShareSDK registerApp:@"iosv1101"
activePlatforms:@[ @(SSDKPlatformTypeSinaWeibo), @(SSDKPlatformTypeMail), @(SSDKPlatformTypeSMS), @(SSDKPlatformTypeCopy), @(SSDKPlatformTypeWechat), @(SSDKPlatformTypeQQ), @(SSDKPlatformTypeRenren), @(SSDKPlatformTypeGooglePlus)] onImport:^(SSDKPlatformType platformType) { switch (platformType) { case SSDKPlatformTypeWechat: [ShareSDKConnector connectWeChat:[WXApi class]]; break; case SSDKPlatformTypeQQ: [ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]]; break; case SSDKPlatformTypeSinaWeibo: [ShareSDKConnector connectWeibo:[WeiboSDK class]]; break; case SSDKPlatformTypeRenren: [ShareSDKConnector connectRenren:[RennClient class]]; break; case SSDKPlatformTypeGooglePlus: [ShareSDKConnector connectGooglePlus:[GPPSignIn class] shareClass:[GPPShare class]]; break; default: break; } } onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo) {
switch (platformType) { case SSDKPlatformTypeSinaWeibo: //設置新浪微博應用信息,其中authType設置爲使用SSO+Web形式受權 [appInfo SSDKSetupSinaWeiboByAppKey:@"568898243" appSecret:@"38a4f8204cc784f81f9f0daaf31e02e3" redirectUri:@"http://www.sharesdk.cn" authType:SSDKAuthTypeBoth]; break; case SSDKPlatformTypeWechat: [appInfo SSDKSetupWeChatByAppId:@"wx4868b35061f87885" appSecret:@"64020361b8ec4c99936c0e3999a9f249"]; break; case SSDKPlatformTypeQQ: [appInfo SSDKSetupQQByAppId:@"100371282" appKey:@"aed9b0303e3ed1e27bae87c33761161d" authType:SSDKAuthTypeBoth]; break; case SSDKPlatformTypeRenren: [appInfo SSDKSetupRenRenByAppId:@"226427" appKey:@"fc5b8aed373c4c27a05b712acba0f8c3" secretKey:@"f29df781abdd4f49beca5a2194676ca4" authType:SSDKAuthTypeBoth]; break; case SSDKPlatformTypeGooglePlus: [appInfo SSDKSetupGooglePlusByClientID:@"232554794995.apps.googleusercontent.com" clientSecret:@"PEdFgtrMw97aCvf0joQj7EMk" redirectUri:@"http://localhost" authType:SSDKAuthTypeBoth]; break; default: break; } }]; return YES; } (注意:每個case對應一個break不要忘記填寫,否則極可能有沒必要要的錯誤,新浪微博的外部庫若是不要客戶端分享或者不須要加關注微博的功能能夠不添加,不然要添加,QQ,微信,google+這些外部庫文件必需要加) |
第四步:添加實現代碼 打開須要集成登陸功能的視圖源碼,把以下代碼複製並粘貼到你要登陸的位置,例如到響應登陸按鈕的方法中。而且修改相應的參數便可。
這裏以QQ登錄爲例:(其餘的平臺也同樣的處理,修改下初始化以及登錄方法裏的平臺類型參數就行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//例如QQ的登陸 [ShareSDK getUserInfo:SSDKPlatformTypeQQ onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) { if (state == SSDKResponseStateSuccess) {
NSLog(@"uid=%@",user.uid); NSLog(@"%@",user.credential); NSLog(@"token=%@",user.credential.token); NSLog(@"nickname=%@",user.nickname); }
else { NSLog(@"%@",error); }
}]; |
也能夠調用這個方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[SSEThirdPartyLoginHelper loginByPlatform:SSDKPlatformTypeQQ onUserSync:^(SSDKUser *user, SSEUserAssociateHandler associateHandler) {
//在此回調中能夠將社交平臺用戶信息與自身用戶系統進行綁定,最後使用一個惟一用戶標識來關聯此用戶信息。 //在此示例中沒有跟用戶系統關聯,則使用一個社交用戶對應一個系統用戶的方式。將社交用戶的uid做爲關聯ID傳入associateHandler。 associateHandler (user.uid, user, user); NSLog(@"dd%@",user.rawData); NSLog(@"dd%@",user.credential);
} onLoginResult:^(SSDKResponseState state, SSEBaseUser *user, NSError *error) {
if (state == SSDKResponseStateSuccess) {
}
}]; |
第五步:支持QQ客戶端登陸的相關配置
QQ若是要跳客戶端登陸的話,須要配置下URL Scheme:
而後打開下圖位置,在URL Types中添加騰訊AppID,其格式爲:tencent+appID(你在QQ中申請的AppId), 如:tencent100371282。如圖所示: