1,系统自带的分享

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {
        NSLog(@"没有设置新浪微博的分享,请到设置里进行登录账户");
        return;
    }
   
    SLComposeViewController * cvc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
    //设置分享文字内容与图片
    [cvc setTitle:@"什么???"];
    [cvc addImage:[UIImage imageNamed:@"IMG_0762.jpg"]];
    //跳转到新浪分享界面
    [self presentViewController:cvc animated:YES completion:nil];
}
 
sharedSDK
1.手动集成
1.将下载好的SDK拖入项目
2.添加需要的库
3.导入所需的头文件(在delegate.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"
 

- (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;
             default:
                 break;
         }
     }
          onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo)
     {
        
         switch (platformType)
         {
// *  SSO授权方式  不会弹出登录界面,跳转到应用中进行分享,只能使用真机测试
// */
//extern NSString *const SSDKAuthTypeSSO;
///**
// *  网页授权方式 弹出登录界面,输入账号和密码登录后才能分享
// */
//extern NSString *const SSDKAuthTypeWeb;
             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;
             default:
                 break;
         }
     }];
    return YES;
}
 
运行:出错
//崩了:[NSConcreteMutableData wbsdk_base64EncodedString]: unrecognized selector sent to instance 0x7f805aca5920'
//新浪微博SDK需要在项目Build Settings中的Other Linker Flags添加"-ObjC"
加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
// 注意: 这里的O是大小,C也是大写
4.在控制器中添加头文件
#import <ShareSDK/ShareSDK.h>
#import <ShareSDKUI/ShareSDK+SSUI.h>

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
 
    //1、创建分享参数
    NSArray* imageArray = @[[UIImage imageNamed:@"IMG_0506.JPG"]];

    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;
                       }
                   }
         ];}
}
//   错误: [__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
    //因为找不到那个图片,用demo的代码找不到那个图片资源,自己换一个就行。
 
效果图:

2.cocoaPod集成
 
podFile中
 # 主模块(必须)
 pod 'ShareSDK3'
 # Mob 公共库(必须) 如果同时集成SMSSDK iOS2.0:可看此注意事项:http://bbs.mob.com/thread-20051-1-1.html
 pod 'MOBFoundation'
 
 # UI模块(非必须,需要用到ShareSDK提供的分享菜单栏和分享编辑页面需要以下1行)
 pod 'ShareSDK3/ShareSDKUI'
 
 # 平台SDK模块(对照一下平台,需要的加上。如果只需要QQ、微信、新浪微博,只需要以下3行)
 pod 'ShareSDK3/ShareSDKPlatforms/QQ'
 pod 'ShareSDK3/ShareSDKPlatforms/SinaWeibo'
 pod 'ShareSDK3/ShareSDKPlatforms/WeChat'
 
# pod 'ShareSDK3/ShareSDKPlatforms/RenRen’ //人人
# pod 'ShareSDK3/ShareSDKPlatforms/AliPaySocial’  //支付宝
 
pod install即可

1. 注册Mob账号,按照文档进行集成
2. 使用pod按照sharedSDK
3. 拷贝文档上的相关代码
4. 修改 registerApp:@"你在Mob上的注册的分享的AppKey"
5. 修改各个平台注册的应用信用信息
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;
//真实开发中这些都需要去QQ开放平台注册.QQ05FB8B52
case SSDKPlatformTypeQQ:
[appInfo SSDKSetupQQByAppId:@"100371282"
                     appKey:@"aed9b0303e3ed1e27bae87c33761161d"
                   authType:SSDKAuthTypeBoth];
break;
default:
break;
重点内容:
5. 修改分享的内容.

6. SSO授权
6.1 配置对应URLScheme
    当分享成功之后,应用需要回跳到我们应用. 那么他们即必须有我的URLScheme.
6.2 配置SCheme白单
    iOS9之后,你要跳转到的应用必须在白名单中说明.

常见错误处理
1. 微信分享,不能跳转的微信应用程序
   这是由于微信对图片有一定要求,jpg图片不能大于32K. 绝大多数的.jpg图片是不支持的,绝大多数png图片是支持的. 建议大家分享的时候,尽量使用png的图片
2. 新浪微博分享SSO授权报SSO授权错误.是由于新浪微博要求:你应用的bundleId与注册新浪微博使用bundleID必须一致. 也是就是说新浪微博要求:bundle id,新浪微博的注册的应用AppKey,appSecret,redirectUri还有配置URLScheme必须一致.
 
 
1. Web授权与SSO授权的区别
   Web授权: 会弹出一个登陆界面,需要用户输入账号和密码登陆,后才能授权
   SSO授权: 跳转到分享平台的App中,无需登陆,直接授权
2. 你在公司做过分享功能吗? 有遇到什么印象深刻的问题吗?
   1. 微信分享使用某些.jpg图片,导致打不开微信的App,无法进行分享,所以分享时候要使用png的图片.
   2. 新浪微博SSO授权错误:1. 我们应用的bundle Id 与 在新浪微博开放平台上注册的App的时候写的   写bundle ID要一致 2. AppKey ,appSecret,redirectUri,URLSCheme要一致.

3. 使用SharedSDK进行分享,如何配置SSO授权?
   1. 配置SChemeURL: target->info->最下面那个选哪个选项中配置
   2. 配置SChemeURL白名单

iOS sharedSDK详解的更多相关文章

  1. 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)

    转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...

  2. IOS SDK详解

    来源:http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html?page=1#42803301 博客专栏>移动开发专栏>I ...

  3. iOS路由详解

    本文如题,路由详解,注定是一篇详细解释iOS路由原理及使用的文章,由于此时正在外地出差,无法详细一一写出,只能不定时的补充. 一.什么是iOS路由 路由一词来源于路由器,可以实现层级之间消息转发的功能 ...

  4. IOS 手势详解

    在IOS中手势可以让用户有很好的体验,因此我们有必要去了解一下手势. (在设置手势是有很多值得注意的地方) *是需要设置为Yes的点击无法响应* *要把手势添加到所需点击的View,否则无法响应* 手 ...

  5. IOS SizeClasses 详解

    SizeClasses 详解 iOS 8在应用界面的可视化设计上添加了一个新的特性-Size Classes.对于任何设备来说,界面的宽度和高度都只分为三种描述:紧凑,任意和宽松.这样开发者便可以无视 ...

  6. iOS模式详解—「runtime面试、工作」看我就 🐒 了 ^_^.

    Write in the first[写在最前] 对于从事 iOS 开发人员来说,当提到 ** runtime时,我想都可以说出来 「runtime 运行时」和基本使用的方法.相信很多开发者跟我当初一 ...

  7. iOS 模式详解—「runtime面试、工作」看我就 🐒 了 ^_^.

    引导 Copyright © PBwaterln Unauthorized shall not be *copy reprinted* . 对于从事 iOS 开发人员来说,所有的人都会答出「runti ...

  8. ios学习--详解IPhone动画效果类型及实现方法

    详解IPhone动画效果类型及实现方法是本文要介绍的内容,主要介绍了iphone中动画的实现方法,不多说,我们一起来看内容. 实现iphone漂亮的动画效果主要有两种方法,一种是UIView层面的,一 ...

  9. iOS CoreAnimation详解(一) 有关Layer的动画

    以前由于项目需要 也写了一些动画 ,但是知识不系统,很散.这段时间趁着项目完成的空袭,来跟着大神的脚步系统的总结一下iOS中Core Animation的知识点. 原博客地址:http://blog. ...

随机推荐

  1. SSH应该使用密钥还是密码?

    关于SSH,几乎每个人都同意密钥要优于密码,更安全,并且更先进,但我并不同意这个观点. 虽然密钥的确可以更好,但它有着还没被意识到的严重风险,并且我认为比得到妥善管理的密码更不安全. 通常密钥更好的理 ...

  2. ubuntu12.04升级后找不到共享目录

    备注:采用VMware-workstation 10 更新命令:sudo apt-get update 今天开始搭建Android开发环境,先升级系统,升级后发现windows和ubuntu共享的目录 ...

  3. 【HDOJ】4343 Interval query

    最大不相交集合的数量.思路是dp[i][j]表示已经有i个不相交集合下一个不相交集合的最右边界.离散化后,通过贪心解. /* 4343 */ #include <iostream> #in ...

  4. 【HDOJ】4328 Cut the cake

    将原问题转化为求完全由1组成的最大子矩阵.挺经典的通过dp将n^3转化为n^2. /* 4328 */ #include <iostream> #include <sstream&g ...

  5. Android开发之一个未解决的bug

    使用Activity之间传递数据的时候,出现了一个bug,但是没有找到哪里出错了. 把代码和log都记录下来,以后研究 代码: MainActivity.class package com.examp ...

  6. Python各种模块下载及安装配置

    方式1 在Python官网https://www.python.org/或者是github搜索进行下载 ,解压缩之后通过命令提示符进入已经解压缩文件夹根目录,输入下面的命令: python setup ...

  7. 深入理解Java虚拟机 - 垃圾收集概述

    首先需要澄清的是,垃圾收集(GC)的历史远比Java要久远,当我们意识到手动管理内存所带来的麻烦时,懒惰的天性推动先驱们寻找更为简单.易用.关键是傻瓜式的内存管理技术.GC技术起源于1960年诞生于M ...

  8. poj3321

    树映射到树状数组上 非常好的题目,给了我很多启发 题目要求动态求一个棵子树的节点个数 不禁联想到了前缀和,只要我们能用一个合适的优先级表示每个顶点,那么就好做了 我们可以考虑将子树表示成区间的形式 这 ...

  9. 【众秒之门 JavaScript与jQuery技术精粹 #BOOK#】第1章 初学JavaScript需知的七件事

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  10. system CPU占用率过高与91助手的关系

    今天正在认真工作,忽然发现电脑越来越慢. 按 CTRL+ALT+DEL打开任务管理器看了下CPU使用率.其中system占用率居然达到了64%.不对劲儿,按照平时习惯,system根本占用了不要这么多 ...