第三方登录

shareSDK集成第三方登录平台

  重点:流程-- 去mob官网注册->选择文档中心创建应用得到appkey等相关信息->集成

一、准备工作

  1、首先去Mob官网注册你的app,http://mob.com/。

  2、选择文档中心。

  3、创建应用得到的App Key和App Secret。

  4、集成Mob的sdk。这里是第一个坑,虽然你可以自定义下载SDK,如果你做QQ分享和登录,一定不要忘记下载QQ空间的SDK。因为QQ本身不支持第三方登录,但支持第三方分享包括QQ空间分享,QQ空间支持第三方登录,所以如果你做QQ分享和登录,一定要记得下载QQ空间的SDK。如果只做分享,那只下载QQ的就行。这里我被坑过,ShareSDK提供的文档里面没有说明。

    5、添加相应的依赖库

 1、 SystemConfiguration.framework、QuartzCore.framework、CoreTelephony.framework、libicucore.dylib、libz.1.2.5.dylib、Security.framework
 2、以下依赖库根据社交平台添加新浪微博SDK依赖库 (从v2.10.5开始)  ImageIO.framework
 3、QQ好友和QQ空间SSO必要(新注册腾讯开放平台帐号只支持SSO授权,只是老开发者才可以使用网页授权) libstdc++.dylib、libsqlite3.dylib

  6、下载简洁版SDK,SDK简单介绍

1、extends:第三方平台SDK。(不需要的平台的SDK可直接移除)
2.MOBFoundation.framework:基础功能框架。(必要)
3.ShareSDK.bundle:ShareSDK资源文件。(必要)
4.ShareSDK.framework:核心静态库。(必要)
5.ShareSDKConnector.framework:用于ShareSDK框架与外部框架连接 的代理框架插件。使用第三方SDK时必要。
6.ShareSDKExtension.framework:对ShareSDK功能的扩展框架插件。目前主要提供第三方平台登录、一键分享、截屏分享、摇一摇分享等相关功能。需要使用以上功能时必要。
7.ShareSDKInterfaceAdapter.framework:ShareSDK v2.x对简洁版的接口兼容包。(建议直接使用简洁版接口,尽量不使用这个兼容包)
8.ShareSDKUI.bundle:分享菜单栏和分享编辑页面资源包。(如果自定义这些UI可直接移除)
9.ShareSDKUI.framework:分享菜单栏和分享编辑页面。(如果自定义这些UI可直接移除)

  7、在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"

  8、到相应开发者平台注册开发者账号,并添加你要进行分享和使用第三方登录应用的信息。

添加新浪微博应用 注册网址 http://open.weibo.com
添加QQ应用 注册网址 http://mobile.qq.com/api/
添加微信应用 http://open.weixin.qq.com

   9、添加白名单

    <key>LSApplicationQueriesSchemes</key>这是qq的
    <array>
        <string>mqqapi</string>
        <string>mqq</string>
        <string>mqqOpensdkSSoLogin</string>
        <string>mqqconnect</string>
        <string>mqqopensdkdataline</string>
        <string>mqqopensdkgrouptribeshare</string>
        <string>mqqopensdkfriend</string>
        <string>mqqopensdkapi</string>
        <string>mqqopensdkapiV2</string>
        <string>mqqopensdkapiV3</string>
        <string>mqzoneopensdk</string>
        <string>wtloginmqq</string>
        <string>wtloginmqq2</string>
        <string>mqqwpa</string>
        <string>mqzone</string>
        <string>mqzonev2</string>
        <string>mqzoneshare</string>
        <string>wtloginqzone</string>
        <string>mqzonewx</string>
        <string>mqzoneopensdkapiV2</string>
        <string>mqzoneopensdkapi19</string>
        <string>mqzoneopensdkapi</string>
        <string>mqqbrowser</string>
        <string>mttbrowser</string>
    </array>

 10、拿到这些AppID、AppSecret、AppKey等东西后就可以开始对ShareSDK进行初始化。

AppDelegate.m中添加下面这个方法,并记得在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中调用。

 - (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;
              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;
}

  11、添加URL Schemes。(项目名 > TARGETS > info > URL Types 点击添加URL Types)SSO设置

1、新浪微博的URL Schemes是:wb 加上在微博开放平台申请的AppKey。
2、微信的URL Schemes是:微信开放平台申请的AppID。
3、QQ空间的URL Schemes是:QQ开放平台申请的 tencent 加上 AppID。(如果只做分享的话,可以不添加,做登录的话必须添加)
QQ的URL Schemes是:QQ 加上 AppID的16进制(如果AppID转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写)
在URL Types中添加QQ的AppID,其格式为:”QQ” + AppId的16进制(如果appId转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写) 转换16进制的方法:这里给出开源中国的在线转码 http://tool.oschina.net/hexconvert/,呵呵,秒转!
转码完成后,需要在十六进制码的前面加上QQ的前缀,以及将十六进制码的字母大写,一定要大写,切记切记!

  12、添加完URL Schemes后,在AppDelegate.m文件中添加以下对URL处理的代码:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [ShareSDK handleOpenURL:url wxDelegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [ShareSDK handleOpenURL:url
             sourceApplication:sourceApplication
                    annotation:annotation
                    wxDelegate:self];
 }
//到此第三方的准备工作就算是做完

  13、 相关配置

    1、设置https安全配置

    2、大部分社交平台SDK不支持bitcode,在搜索框中输入bitcode,在Build Setting输入bitcode,设置为NO

  14、分享代码如下:

1.需要在分享的试图中导入的头文件
    #import <ShareSDK/ShareSDK.h>
    #import <ShareSDKUI/ShareSDK+SSUI.h>
2.调用构造分享参数接口和分享的接口
    //1、创建分享参数
NSArray* imageArray = @[[UIImage imageNamed:@"shareImg.png"]];
(注意:图片必须要在Xcode左边目录里面,名称必须要传正确,如果要分享网络图片,可以这样传iamge参数 images:@[@"http://mob.com/Assets/images/logo.png?v=20150320"])
if (imageArray) {

    NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
    [shareParams SSDKSetupShareParamsByText:@"分享内容"
                                     images:imageArray
                                        url:[NSURL URLWithString:@"http://mob.com"]
                                      title:@"分享标题"
                                       type:SSDKContentTypeAuto];
 //2、分享(可以弹出我们的分享菜单和编辑界面)
    [ShareSDK showShareActionSheet:nil //要显示菜单的视图, iPad版中此参数作为弹出菜单的参照视图,只有传这个才可以弹出我们的分享菜单,可以传分享的按钮对象或者自己创建小的view 对象,iPhone可以传nil不会影响
                             items:nil
                       shareParams:shareParams
               onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) {

                   switch (state) {
                       case SSDKResponseStateSuccess:
                       {
                           UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享成功"
                                                                               message:nil
                                                                              delegate:nil
                                                                     cancelButtonTitle:@"确定"
                                                                     otherButtonTitles:nil];
                           [alertView show];
                           break;
                       }
                       case SSDKResponseStateFail:
                       {
                           UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"分享失败"
                                                                               message:[NSString stringWithFormat:@"%@",error]
                                                                              delegate:nil
                                                                     cancelButtonTitle:@"OK"
                                                                     otherButtonTitles:nil, nil];
                            [alert show];
                            break;
                        }
                        default:
                           break;
                        }
                }  
    ];} 

  15、方法中的shareType参数传什么值就分享到什么平台:

ShareTypeSinaWeibo            //新浪微博 
ShareTypeQQSpace              //QQ空间 (注意:填写这个类型就可以分享到好友和QQ空间,也可以用来做登录)
ShareTypeWeixiSession         //微信好友 (这个类型也可以用来做微信登录)
ShareTypeWeixiTimeline        //微信朋友圈

  16、登录

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

  17、shareSDKUI设置

(1)、如果你想修改图标,把你的定制的图标讲此文件下对应的图标替换即可,注意要先删除shareSDK自带的再倒入,不然导不进去,固定名称:sns_icon_xx@2x.png。
(2)、shareSDK 自带的分享平台名称默认是英文的,如果想汉化的话,执行操作如下:工程->info->localizations本地化->可以在国际化中修改

 (3)、跳过分享页面

//先构造分享参数:
 NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
 [shareParams SSDKSetupShareParamsByText:@"分享内容"
                                     images:@[[UIImage imageNamed:@"shareImg.png"]]
                                        url:[NSURL URLWithString:@"http://mob.com"]
                                      title:@"分享标题"
                                       type:SSDKContentTypeAuto];
  //调用分享的方法
  SSUIShareActionSheetController *sheet = [ShareSDK showShareActionSheet:view
                           items:nil
                     shareParams:shareParams
                  onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) {
                         switch (state) {
                                       case SSDKResponseStateSuccess:
                                                NSLog(@"分享成功!");
                                                break;
                                       case SSDKResponseStateFail:
                                                NSLog(@"分享失败%@",error);
                                                break;
                                       case SSDKResponseStateCancel:
                                                 NSLog(@"分享已取消");
                                                 break;
                                       default:
                                                  break;
                                     }
                               }];
//删除和添加平台示例
 [sheet.directSharePlatforms removeObject:@(SSDKPlatformTypeWechat)];(默认微信,QQ,QQ空间都是直接跳客户端分享,加了这个方法之后,可以跳分享编辑界面分享)
 [sheet.directSharePlatforms addObject:@(SSDKPlatformTypeSinaWeibo)];(加了这个方法之后可以不跳分享编辑界面,直接点击分享菜单里的选项,直接分享)

  (4)、自定义分享菜单栏样式

// 弹出分享菜单需要导入的头文件
#import <ShareSDKUI/ShareSDK+SSUI.h>
// 自定义分享菜单栏需要导入的头文件
#import <ShareSDKUI/SSUIShareActionSheetStyle.h>

//1、创建分享参数(必要)
NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
NSArray* imageArray = @[[UIImage imageNamed:@"图片名.png"]];
 (注意:图片必须要在Xcode左边目录里面,名称必须要传正确,如果要分享网络图片,可以这样传iamge参数 images:@[@"http://mob.com/Assets/images/logo.png?v=20150320"])
[shareParams SSDKSetupShareParamsByText:@"分享内容"
                                 images:imageArray
                                    url:[NSURL URLWithString:@"http://mob.com"]
                                  title:@"分享标题"
                                   type:SSDKContentTypeAuto];

// 设置分享菜单栏样式(非必要)
// 设置分享菜单的背景颜色
[SSUIShareActionSheetStyle setActionSheetBackgroundColor:[UIColor colorWithRed:249/255.0 green:0/255.0 blue:12/255.0 alpha:0.5]];
// 设置分享菜单颜色
[SSUIShareActionSheetStyle setActionSheetColor:[UIColor colorWithRed:21.0/255.0 green:21.0/255.0 blue:21.0/255.0 alpha:1.0]];
// 设置分享菜单-取消按钮背景颜色
[SSUIShareActionSheetStyle setCancelButtonBackgroundColor:[UIColor colorWithRed:21.0/255.0 green:21.0/255.0 blue:21.0/255.0 alpha:1.0]];
// 设置分享菜单-取消按钮的文本颜色
[SSUIShareActionSheetStyle setCancelButtonLabelColor:[UIColor blackColor]];
// 设置分享菜单-社交平台文本颜色
[SSUIShareActionSheetStyle setItemNameColor:[UIColor whiteColor]];
// 设置分享菜单-社交平台文本字体
[SSUIShareActionSheetStyle setItemNameFont:[UIFont systemFontOfSize:10]];
//设置分享编辑界面的导航栏颜色
[SSUIEditorViewStyle setiPhoneNavigationBarBackgroundColor:[UIColor blackColor]];
//设置编辑界面标题颜色
[SSUIEditorViewStyle setTitleColor:[UIColor redColor]];
//设置取消发布标签文本颜色
[SSUIEditorViewStyle setCancelButtonLabelColor:[UIColor blueColor]];
[SSUIEditorViewStyle setShareButtonLabelColor:[UIColor blueColor]];
//设置分享编辑界面状态栏风格
[SSUIEditorViewStyle setStatusBarStyle:UIStatusBarStyleLightContent];
//设置简单分享菜单样式
[SSUIShareActionSheetStyle setShareActionSheetStyle:ShareActionSheetStyleSimple];

//2、弹出ShareSDK分享菜单
[ShareSDK showShareActionSheet:view
                         items:nil
                   shareParams:shareParams
           onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) { ...... }

  (5)、自定义UI

//创建分享参数
NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
[shareParams SSDKSetupShareParamsByText:@"分享内容"
                                     images:images //传入要分享的图片
                                        url:[NSURL URLWithString:@"http://mob.com"]
                                      title:@"分享标题"
                                       type:SSDKContentTypeAuto];
 //进行分享
 [ShareSDK share:SSDKPlatformTypeSinaWeibo //传入分享的平台类型
     parameters:shareParams
onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) { // 回调处理....}];
}

    18、相关错误原因

1、去新浪微博开放平台的应用信息-->高级信息-->OAuth2.0授权设置,填授权回调页
与取消授权回调页链接,二者相同;然后将该链接复制到项目中初始化微博的地方的redirectUri参数中的链接。
2、出现sso的报错,是因为微博开放平台的bundleid和工程的不一致

  开源shareSDK UI地址:https://github.com/MobClub/ShareSDKUI

  参考网址:http://www.jianshu.com/p/91f0d3d180eb

原文地址:https://www.cnblogs.com/TheYouth/p/6888338.html