iOS:shareSDK第三方登錄


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)
                                    {
 
                                    }
 
}];

 


免責聲明!

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



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