> >

一.第三方登录的定义

第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录流程。这里的第三方平台,如新浪微博,QQ,微信,Facebook,Twitter等平台。这里我们可以登录获取相应的用户信息和授权信息,例如uid,token等。用户可以获取到信息用来做自己的操作。

二.获取AppKey

如何在我们的官网注册应用得到appkey,请点击链接看里面的操作步骤

三.下载SDK

请点击这里进去下载相应的sdk

四.快速集成

第一步:将下载的SDK解压后导入到您的工程中,见下图

9022ED55-8A2F-482D-9B8F-855D8FB062E6

拖到工程中后弹出以下对话框,勾选”Copy items into destination group’s folder(if needed)”,并点击“Finish“按钮。

注意:请务必在上述步骤中选择“Create groups for any added folders”单选按钮组。如果你选择“Create folder references for any added folders”,一个蓝色的文件夹引用将被添加到项目并且将无法找到它的资源。

第二步:添加依赖库 添加步骤见下图

233D16A0-E241-4D4B-ACF2-4C03259F995A

必须添加的依赖库如下(Xcode 7 下 *.dylib库后缀名更改为*.tbd):
  • libicucore.dylib
  • libz.dylib
  • libstdc++.dylib
  • JavaScriptCore.framework
以下依赖库根据社交平台添加:
新浪微博SDK依赖库

  • ImageIO.framework
  • libsqlite3.dylib
QQ好友和QQ空间SDK依赖库

  • libsqlite3.dylib
微信SDK依赖库

  • libsqlite3.dylib
短信和邮件需要依赖库

  • MessageUI.framework
  • (注意:若不想导入不需要的平台的依赖库,可以到 ShareSDK 下的 PlatformSDK 文件夹将不需要的原生 SDK 移除。)
第三步:设置ShareSDK的Appkey并初始化对应的第三方社交平台 打开*AppDelegate.m(*代表你的工程名字)导入头文件
#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并且初始化第三方平台(各社交平台申请APPkey 的网址及申请流程汇总

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
      /**
     *  设置ShareSDK的appKey,如果尚未在ShareSDK官网注册过App,请移步到http://mob.com/login 登录后台进行应用注册,
     *  在将生成的AppKey传入到此方法中。
     *  方法中的第二个第三个参数为需要连接社交平台SDK时触发,
     *  在此事件中写入连接代码。第四个参数则为配置本地社交平台时触发,根据返回的平台类型来配置平台信息。
     *  如果您使用的时服务端托管平台信息时,第二、四项参数可以传入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;
                  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登陆为例
(其他的平台也一样的处理,修改下初始化以及登陆方法里的平台类型参数:微信登录-> SSDKPlatformTypeWechat,新浪微博登录->SSDKPlatformTypeSinaWeibo,文档最后介绍各个平台需要配置的url schemes 参数)

//例如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);
                 }

     }];

也可以调用这个方法

// 导入头文件
#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)
                                    {

                                    }

                                }];
第五步:支持QQ客户端登录的相关配置

QQ如果要跳客户端登录的话,需要配置下URL Scheme:

然后打开下图位置,在URL Types中添加腾讯AppID,其格式为:tencent+appID(你在QQ中申请的AppId), 如:tencent100371282。如图所示:

00490FE9-2959-43BE-B149-F30B8CC0C1A6

 

可以支持第三方登录的平台以及可以跳客户端登录需要配置URL Scheme的平台,未列出的则不支持登录

 

平台 配置URL Scheme 格式 举例 备注
新浪微博 wb+微博appKey 如AppKey:568898243

wb568898243

QQ/Qzone “tencent”+腾讯QQ互联应用appID 如appID:100371282

tencent100371282

腾讯微博 只能网页授权登录,无URL Scheme配置
微信 微信的appid wx4868b35061f87885
Facebook fb+在facebook注册得到的ApiKey 如ApiKey:107704292745179

fb107704292745179

Twitter Twitter只能网页授权分享,无URL Scheme配置
易信 易信appkey yx0d9a9f9088ea44d78680f3274da1765f
Google+ 只能网页授权分享,无URL Scheme的配置
领英 只能网页授权登录,无URL Scheme的配置
人人网 rm+人人网appid+Bundle id 如appid:226427 Bundle id:com.mob.demoShareSDK

rm226427com.mob.demoShareSDK

在人人网注册应用的Bundle id一定要和自己项目里的Bundle id一致
豆瓣 只能网页授权登录,无URL Scheme配置
开心网 只能网页授权登录,无URL Scheme配置
Pocket Pocket的回调地址 如:pocketapp1234

pocketapp1234

Instagram 只能网页授权登录,无URL Scheme配置
Tumblr tb+ConsumerKey 如:2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM

tb2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM

Tumblr必须要配置这个URL Scheme,才可以跳授权登录界面,主要是跳Safari浏览器授权网页授权登录
Flickr 只能网页授权登录,无URL Scheme配置
YouDaoNote 只能网页授权登录,无URL Scheme配置
印象笔记 只能网页授权登录,无URL Scheme配置
Kakao kakao+appkey 如apply:48d3f524e4a636b08d81b3ceb50f1003

kakao48d3f524e4a636b08d81b3ceb50f1003

Pinterest pdk+ClientId 如ClientId:4797078908495202393

pdk4797078908495202393

Dropbox 只能网页授权登录,无URL Scheme配置
VKontakte vk+appid 如appid:5312801

vk5312801

明道 只能网页授权登录,无URL Scheme配置
Instapaper 只能网页授权登录,无URL Scheme配置
特举例各个主流社交平台登录在Xcode项目里需要配置的url schemes:

url