帮助与文档

> >

第三方登录的定义

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

一、获取AppKey

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

二、下载SDK

获取ShareSDK-iOS :下载地址,解压压缩包之后结构如图所示:

目录结构

目录结构 (使用时直接将SDK这个文件拖入工程)

SDK
  | —– Required( MOB 基础公共库目录 )
        | —– MOBFoundation.framework:基础功能框架。(必要)
  | —– ShareSDK ( ShareSDK 目录 )
        | —– ShareSDK.framework:核心静态库。(必要)
        | —– Support (ShareSDK 各组件)
              | —– Required ( 必要 )
                   | —– ShareSDK.bundle:ShareSDK资源文件。(必要)
                   | —– ShareSDKConnector.framework:用于ShareSDK框架与外部框架连接的代理框架插件。(使用第三方SDK时必要。)
              | —– PlatformSDK 第三方平台SDK。(不需要的平台的SDK可直接移除)
              | —– PlatformConnector 对ShareSDKConnector模块架构进行优化,根据平台进行分包。(不需要的平台的库可以移除)
              | —– Optional ( 可选 )
                    | —– ShareSDKUI.bundle:分享菜单栏和分享编辑页面资源包。(如果自定义这些UI可直接移除)
                    | —– ShareSDKExtension.framework:对ShareSDK功能的扩展框架插件。(主要提供第三方平台登录、 一键分享、截屏分享、摇一摇分享等相关功能。需要使用以上功能时必要。)
                    | —– ShareSDKUI.framework:分享菜单栏和分享编辑页面。(如果自定义这些UI可直接移除)
                    | —– ShareSDKConfigFile.bundle:用xml来初始化或者构造分享参数的资源文件。(用代码来初始化,构造分享参数可直接移除,下载的时候也是可根据自己的要求勾选下载的)
                    | —– ShareSDKConfigFile.framework:用xml来初始化,构造分享参数,使用的分享的方法库。用代码来初始化,构造分享参数可直接移除,下载的时候也是可根据自己的要求勾选下载的)

三、快速集成

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

未命名

注意:请务必在上述步骤中选择“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
Instagram需要依赖库
  • AssetsLibrary.framework
  • Photos.framework
美拍需要依赖库
  • AssetsLibrary.framework

第三步:设置ShareSDK的Appkey并初始化对应的第三方社交平台

在项目工程的Info.plist 中如图增加 MOBAppKey 和 MOBAppSecret 两个字段
在 MOBAppKey中 设置ShareSDK的appKey,如果尚未在ShareSDK官网注册过App,请移步到登录后台进行应用注册  也可以点击链接看里面的操作步骤。
appkey
友情提示:如果您同时多个MOBSDK产品 在info.plist中的设置一次就可以了。
打开*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应用
@param activePlatforms
使用的分享平台集合
 @param importHandler (onImport)
导入回调处理,当某个平台的功能需要依赖原平台提供的SDK支持时,需要在此方法中对原平台SDK进行导入操作
 @param configurationHandler (onConfiguration)
配置回调处理,在此方法中根据设置的platformType来填充应用配置信息
 */
[ShareSDK registerActivePlatforms:@[
                            @(SSDKPlatformTypeSinaWeibo),
                            @(SSDKPlatformTypeMail),
                            @(SSDKPlatformTypeSMS),
                            @(SSDKPlatformTypeCopy),
                            @(SSDKPlatformTypeWechat),
                            @(SSDKPlatformTypeQQ),
                            @(SSDKPlatformTypeRenren),
                            @(SSDKPlatformTypeFacebook),
                            @(SSDKPlatformTypeTwitter),
                            @(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 SSDKPlatformTypeFacebook:
                      [appInfo SSDKSetupFacebookByApiKey:@”107704292745179″
                                               appSecret:@”38053202e1a5fe26c80c753071f0b573″
                                            displayName:@”shareSDK”
                                             authType:SSDKAuthTypeBoth];
                    break;
                  case SSDKPlatformTypeTwitter:
                      [appInfo SSDKSetupTwitterByConsumerKey:@”LRBM0H75rWrU9gNHvlEAA2aOy”
                                               consumerSecret:@”gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G”
                                            redirectUri:@”http://mob.com”]
                    break;
                   case SSDKPlatformTypeGooglePlus:
                     [appInfo SSDKSetupGooglePlusByClientID:@”232554794995.apps.googleusercontent.com
                                                clientSecret:@”PEdFgtrMw97aCvf0joQj7EMk”
                                                 redirectUri:@”http://localhost“];
                    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:568898243wb568898243
QQ/Qzone “tencent”+腾讯QQ互联应用appID 如appID:100371282tencent100371282
腾讯微博 只能网页授权登录,无URL Scheme配置
微信 微信的appid wx4868b35061f87885
Facebook fb+在facebook注册得到的ApiKey 如ApiKey:107704292745179fb107704292745179
Twitter Twitter只能网页授权分享,无URL Scheme配置
易信 易信appkey yx0d9a9f9088ea44d78680f3274da1765f
Google+ 只能网页授权分享,无URL Scheme的配置
领英 只能网页授权登录,无URL Scheme的配置
人人网 rm+人人网appid+Bundle id 如appid:226427 Bundle id:com.mob.demoShareSDKrm226427com.mob.demoShareSDK 在人人网注册应用的Bundle id一定要和自己项目里的Bundle id一致
豆瓣 只能网页授权登录,无URL Scheme配置
开心网 只能网页授权登录,无URL Scheme配置
Pocket Pocket的回调地址 如:pocketapp1234pocketapp1234
Instagram 只能网页授权登录,无URL Scheme配置
Tumblr tb+ConsumerKey 如:2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwMtb2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM Tumblr必须要配置这个URL Scheme,才可以跳授权登录界面,主要是跳Safari浏览器授权网页授权登录
Flickr 只能网页授权登录,无URL Scheme配置
YouDaoNote 只能网页授权登录,无URL Scheme配置
印象笔记 只能网页授权登录,无URL Scheme配置
Kakao kakao+appkey 如apply:48d3f524e4a636b08d81b3ceb50f1003kakao48d3f524e4a636b08d81b3ceb50f1003
Pinterest pdk+ClientId 如ClientId:4797078908495202393pdk4797078908495202393
Dropbox 只能网页授权登录,无URL Scheme配置
VKontakte vk+appid 如appid:5312801vk5312801
明道 只能网页授权登录,无URL Scheme配置
Instapaper 只能网页授权登录,无URL Scheme配置
YouTube 只能网页授权登录,无URL Scheme配置
Line line3rdp+Bundle id 可以直接固定line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)这样配置,$(PRODUCT_BUNDLE_IDENTIFIER)自动
显示您自己的项目里的Bundle id
特举例各个主流社交平台登录在Xcode项目里需要配置的url schemes:

url