shareSDK第三方登錄跟分享差不多,比較簡單,前面已有介紹。這里簡單寫一下第三方登錄吧。
1、首先:我用到了QQ、微信、新浪這三個平台的登錄,需要到它們各自的開發者平台注冊開發者賬號,這是我的QQ創建應用截圖,因為沒有導入app的應用圖標,所以未審核,但是仍然會生成可用的AppID和App KEY,可以自己接着完善信息提交審核。
2、其次:下載ShareSDK包,將需要的文件導入項目中。這里推薦使用CocoaPods,它可以直接幫助導入所有的依賴庫,避免麻煩。我導入的格式如下:
pod 'ShareSDK3'
pod 'MOBFoundation'
pod 'ShareSDK3/ShareSDKPlatforms/QQ'
pod 'ShareSDK3/ShareSDKPlatforms/SinaWeibo'
pod 'ShareSDK3/ShareSDKPlatforms/WeChat'
3、然后:使用各個平台的appkey或者appid去注冊ShareSDK應用,代碼如下:
@implementation AppDelegate (KJShareSDk) -(void)shareApplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ /** * 設置ShareSDK的appKey,如果尚未在ShareSDK官網注冊過App,請移步到http://mob.com/login 登錄后台進行應用注冊, * 在將生成的AppKey傳入到此方法中。 * 方法中的第二個第三個參數為需要連接社交平台SDK時觸發, * 在此事件中寫入連接代碼。第四個參數則為配置本地社交平台時觸發,根據返回的平台類型來配置平台信息。 * 如果您使用的時服務端托管平台信息時,第二、四項參數可以傳入nil,第三項參數則根據服務端托管平台來決定要連接的社交SDK。 */ [ShareSDK registerApp:shareSDK_AppKey activePlatforms:@[ @(SSDKPlatformTypeSinaWeibo), @(SSDKPlatformTypeWechat), @(SSDKPlatformTypeQQ)] 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; default: break; } } onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo) { switch (platformType) { case SSDKPlatformTypeSinaWeibo: //設置新浪微博應用信息,其中authType設置為使用SSO+Web形式授權 [appInfo SSDKSetupSinaWeiboByAppKey:sinaWiebo_AppKey appSecret:sinaWiebo_AppSecret redirectUri:sinaWiebo_RedirectUri authType:SSDKAuthTypeBoth]; break; case SSDKPlatformTypeWechat: [appInfo SSDKSetupWeChatByAppId:wechat_AppId appSecret:wechat_AppSecret]; break; case SSDKPlatformTypeQQ: [appInfo SSDKSetupQQByAppId:qq_AppId appKey:qq_AppKey authType:SSDKAuthTypeBoth]; break; default: break; } }]; } @end
4、接着:去項目中的info下的URL Types設置白名單,用來支持客戶端的跳轉,參照官方截圖如下:
這是我的截圖:
6、開始調用集成的方法,進三方登錄即可,只要代碼如下:
方法一:
//例如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);
//在這里面實現app界面的跳轉:
1.如果用戶將qq和app已經進行了綁定,直接登錄成功就能拿到用戶的數據;
2.如果用戶沒有將qq和app進行綁定,那么綁定成功后就會從服務器獲取到token,這個token是用來獲取用戶數據的,很重要。
總之:每一個用戶都有自己唯一的標識,使用第三方登錄,第三方是不知道用戶的賬號和密碼的,那么用戶必須先綁定,綁定成功后,服務器返回這個標識,之后服務器通過這個標識才能獲取到用戶的數據。
} else { NSLog(@"%@",error); } }];
方法二:
/ 導入頭文件 #import <ShareSDKExtension/SSEThirdPartyLoginHelper.h> [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) { } }];