社交网络编程API

社交网络编程主要使用iOS提供的Social框架,目前Social框架主要包含两个类:

  • SLComposeViewController
  • 提供撰写社交信息(如微博信息)的视图控制器,有iOS系统提供UI,就是写入要分享内容的小弹出框。
  • SLRequest封装了HTTP请求,提供了同一的请求社交网络服务的接口,能够直接与社交网路服务通信的能力,没有UI需要自己编写设计.
  • 除了Social框架外,还有可能用到UIActivityViewControlelr和ACAccount.UIActivityViewController也是iOS6的新的内容,它提供了一个分享列表视图控制器。而ACAccount是Accounts框架中的一个类,ACAccount对象封装了存储在账户数据库中用户账户信息,使用SLRequest访问社交网络服务时,需要使用ACAccount对象提供 用户账户信息。

iOS6分享列表------UIActivityViewController

在iOS6之后提供了一个分享列表视图,它通过UIActivityViewController管理。苹果设计它的主要目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单。

内置活动列表项

内置了9个活动列表项目,他们是下面的9个常量定义的:

  • UIActivityTypePostToFacebook,Facebook活动列表项;
  • UIActivityTypePostToTwitter,Twitter活动列表项;
  • UIActivityTypePostToWeibo,新浪微博活动列表项;
  • UIActivityTypeMessage,iOS中的iMessage应用活动那个列表项;
  • UIActivityTypeMail,发送Mail活动列表项;
  • UIActivityTypePrint,共享打印活动列表项;
  • UIActivityTypeCopyToPasteboard,复制到剪切板活动列表项;
  • UIActivityTypeAssignToContact,访问联系人活动列表项;
  • UIActivityTypeSaveToCameraRoll,访问设备上的相册活动列表项;

自定义活动列表项

有时候根据共享内容不同,需要自定义活动列表项。例如一个视频,需要共享到优酷。下面介绍自定义活动列表项。

凡是继承UIActivity抽象类的子类对象都可以放到列表中呈现出来。这包括了系统内置的9个活动列表,也可是是我们自定义的列表项。UIActivity抽象类中需要子类实现的方法如下:

  • -(NSString *)activityType,为自定义活动列表项指定一个服务类型标识
  • -(NSString *)activityTitle,指定在列表中出现的名称
  • -(UIImage *)activityImage,指定在列表中显示的图标
  • -(BOOL)canPerformWithActivityItems:(NSArray *)activityItems,指定活动列表中的某些数据项目,是否可以执行,返回YES可以执行,返回NO,不可以执行。
  • -(void)prepareWithActivityItems:(NSArray *)activityItems,预处理要执行的活动列表中的数据项目;
  • -(UIViewController *)activityViewController,执行活动列表,如果返回非nil,会弹出模态视图,在结束时调用activityDidFinish;
  • -(void)performActivity,执行活动列表,如果activityViewController方法没有提供视图,就会调用这个方法,在结束时调用activityDidFinish;
  • -(void)activityDidFinish:(BOOL)completed,当执行完成的时候必须调用哪个这个方法;

自定义视图的用到的图片的大小

  • Book.png 普通iPhone设备,分辨率不小于43*43
  • Book@2x.png,视网膜显示iPhone设备,分辨率不小于86*86
  • Book~ipad.png,普通iPad设备,分辨率不小于55*55
  • Book@2x~ipad.png,视网膜显示屏iPad设备,分辨率不小于110*110

代码展示:

//自定义活动列表

 - (IBAction)shareAction:(UIBarButtonItem *)sender {

    NSURL *urlTbShare = [NSURL URLWithString:@"http://www.notepadapi.sinaapp.com"];

    NSArray *activityItems = @[urlTbShare];   

    BookActivity *bookActivity = [BookActivity new];

    NSArray *applicationActivities = @[bookActivity];

 UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];

    [self presentViewController:activityVC animated:YES completion:nil];

}   

BookActivity.h

 #import <UIKit/UIKit.h>

@interface BookActivity : UIActivity
@property(nonatomic,strong)NSURL *url;
@end

  

BookActivity.m

#import "BookActivity.h"

@implementation BookActivity

/*为自定义活动列表项指定一个服务类型标识 */

-(NSString *)activityType {

    return NSStringFromClass([self class]);

}

-(NSString *)activityTitle {

    return @"ActivityTitle";

}

/**/

-(UIImage *)activityImage {

    return [UIImage imageNamed:@"image"];

}

-(BOOL)canPerformWithActivityItems:(NSArray *)activityItems {

    for(id activityItem in activityItems) {

        if ([activityItem isKindOfClass:[NSURL class]]) {

            if ([[UIApplication sharedApplication] canOpenURL:activityItem]) {

                return YES;

            }

        }

    }

     return NO;

}

-(void)prepareWithActivityItems:(NSArray *)activityItems {

    for(id activityItem in activityItems) {

        if ([activityItem isKindOfClass:[NSURL class]]) {

            _url = activityItem;

        }

    }

}

-(void)performActivity {

    BOOL completed = [[UIApplication sharedApplication] openURL:_url];

    [self activityDidFinish:completed];

}

@end

  

撰写视图控制器---SLComposeViewController

它的呈现在iPhone采用模态视图,iPad则需要Popover视图呈现

如果发送微博信息并不像弹出分享列表,再去选择,而是在应用中直接进入写评论的地方(iOS系统提供的UI画面)。SLComposeViewController类可以帮助我们实现这个目的,SLComposeViewControlelr不仅可以撰写weibo,还可以撰写Tweet和Facebook.

发送这样的社交网络信息一般会包含3中信息---初始文本、图片和超链接,因此SLComposeViewController类设计3个相对方法:

  • -(BOOL)setInitialText:(NSString *)text,设置初始文本内容
  • -(BOOL)addImage:(UIImage *)iamge,添加图片
  • -(BOOL)addURL:(NSURL *)url,添加超链接信息

代码展示

- (IBAction)zhuanxieAction:(UIBarButtonItem *)sender {

    SLComposeViewController *composeViewControlelr = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

        SLComposeViewControllerCompletionHandler __block completionHandler = ^(SLComposeViewControllerResult result) {

        [composeViewControlelr dismissViewControllerAnimated:YES completion:nil];

            switch (result) {

                case SLComposeViewControllerResultCancelled:

                    NSLog(@"Canceled....");

                   break;

                case SLComposeViewControllerResultDone:

                    NSLog(@"Posted......");

                    break;

                default:

                    break;

            }

        };

        [composeViewControlelr addImage:[UIImage imageNamed:@"image"]];

        [composeViewControlelr setInitialText:@"分享文本"];

        [composeViewControlelr addURL:[NSURL URLWithString:@"http://www.baidu.com"]];

        [composeViewControlelr setCompletionHandler:completionHandler];

        [self presentViewController:composeViewControlelr animated:YES completion:nil];

    }

}

  

社交网络编程API之iOS系统自带分享的更多相关文章

  1. iOS系统自带分享功能

    很多APP中都带有社交分享功能,通过用户的分享,让更多地人去了解和使用这个APP,目前社交分享是移动互联网应用程序推广的最重要手段之一,国内较或的分享平台有微信,IOS6后苹果集成的新浪微博,还有IO ...

  2. iOS系统自带的 UIAlertView 自动旋转的实现

    这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考 ...

  3. 利用UIActivityController调用ios系统自带的分享功能,实现微信发布多图的功能

    通过一番查找以后找到一个类UIActivityController,可以调用系统的social.framework中的分享接口.看下面的图就知道了,这个还是挺常见的 微信发布多图 借鉴了CSDN上的一 ...

  4. iOS系统自带正则表达式简单运用

    //组装一个字符串,把里面的网址解析出来 NSString *urlString = @"sfdshttp://www.baidu.com"; NSError *error; // ...

  5. Android 使用系统自带分享功能

    way1: Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain");// setT ...

  6. Android系统自带分享功能的实现(可同时分享文字和图片)

     /** * 分享功能 * * @param context * 上下文 * @param activityTitle * Activity的名字 * @param msgTitle * 消息标题 ...

  7. iOS网络编程笔记——社交网络编程

    社交网络编程主要使用iOS提供的social框架,目前social框架主要分为两个类: (1)SLComposeViewController提供撰写社交信息(如微博信息)的视图控制器,由iOS系统提供 ...

  8. ShareIntentUtil【调用系统自带的分享的工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 根据参考资料的文章,整理了调用系统自带分享的工具类(实现了适配7.0FileProvider的功能),需要搭配<Android ...

  9. Ios二维码扫描(系统自带的二维码扫描)

    Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...

随机推荐

  1. MySQL 设计规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  2. nmcli工具详解

    目录 1. nmcli 安装 2. nmcli 基本选项 3. general 常规选项 3.1 status 3.2 hostname 3.3 permissions 3.4 loggin 4. n ...

  3. AcceptEx与完成端口(IOCP)结合实例

    前言 在windows平台下实现高性能网络服务器,iocp(完成端口)是唯一选择.编写网络服务器面临的问题有:1 快速接收客户端的连接.2 快速收发数据.3 快速处理数据.本文主要解决第一个问题. A ...

  4. mysql表分区实战

    一,什么是数据库分区以mysql为例,mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面 (可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件 ...

  5. Java线程中的join使用实例

    JDK中解释为 Waits for this thread to die. 等待本线程结束后,下一个线程才可以运行. 实例要求: 现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3 ...

  6. Spring Boot初识(4)- Spring Boot整合JWT

    一.本文介绍 上篇文章讲到Spring Boot整合Swagger的时候其实我就在思考关于接口安全的问题了,在这篇文章了我整合了JWT用来保证接口的安全性.我会先简单介绍一下JWT然后在上篇文章的基础 ...

  7. python机器学习笔记 ID3决策树算法实战

    前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...

  8. Python和Java编程题(二)

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列1,1,2,3,5,8,13,21 ...

  9. vb.net 日期時間

    Dim dMyDate As DateTime = DateTime.Now‘當前時間日期 DateDiff("h", C13, C3)’ 二時間差 ‘日期格式 C2 = Form ...

  10. Linux-iconv命令之批处理(18)

    iconv命令是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行 常用选项 -f font1 :(from)将font1型的字符编码进行转换 -t font2 ...