社交网络编程API之iOS系统自带分享
社交网络编程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系统自带分享的更多相关文章
- iOS系统自带分享功能
很多APP中都带有社交分享功能,通过用户的分享,让更多地人去了解和使用这个APP,目前社交分享是移动互联网应用程序推广的最重要手段之一,国内较或的分享平台有微信,IOS6后苹果集成的新浪微博,还有IO ...
- iOS系统自带的 UIAlertView 自动旋转的实现
这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考 ...
- 利用UIActivityController调用ios系统自带的分享功能,实现微信发布多图的功能
通过一番查找以后找到一个类UIActivityController,可以调用系统的social.framework中的分享接口.看下面的图就知道了,这个还是挺常见的 微信发布多图 借鉴了CSDN上的一 ...
- iOS系统自带正则表达式简单运用
//组装一个字符串,把里面的网址解析出来 NSString *urlString = @"sfdshttp://www.baidu.com"; NSError *error; // ...
- Android 使用系统自带分享功能
way1: Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain");// setT ...
- Android系统自带分享功能的实现(可同时分享文字和图片)
/** * 分享功能 * * @param context * 上下文 * @param activityTitle * Activity的名字 * @param msgTitle * 消息标题 ...
- iOS网络编程笔记——社交网络编程
社交网络编程主要使用iOS提供的social框架,目前social框架主要分为两个类: (1)SLComposeViewController提供撰写社交信息(如微博信息)的视图控制器,由iOS系统提供 ...
- ShareIntentUtil【调用系统自带的分享的工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 根据参考资料的文章,整理了调用系统自带分享的工具类(实现了适配7.0FileProvider的功能),需要搭配<Android ...
- Ios二维码扫描(系统自带的二维码扫描)
Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...
随机推荐
- Docker---Run命令
docker运行在一个独立的隔离的进程中. 当用户执行dockerrun,它将启动一个有着独立的文件系统,独立的网络和独立的进程树的进程. 基本的docker run命令的格式: docker run ...
- C/C++和Lua是如何进行通信的?
为了实现Lua和其他语言之间的通信,Lua虚拟机为C/C++提供了两个特性: Lua_State状态机 lua_State主要是管理一个lua虚拟机的执行环境, 一个lua虚拟机可以有多个执行环境.L ...
- [java]我的数据在哪里?——数据的内存模型
在编写程序时,我们也许会有这样一个问题,我们编写的程序中的数据运行时,会保存在哪里呢?简单直接的回答可能是——内存.这个回答在多数情况下可能都是对的,但事实上并不准确,我们都知道内存,即随机访问存储器 ...
- angularjs学习第七天笔记(系统指令学习)
您好,接着在昨天对简单指令学习了解以后,今天开始学习了解angularjs中的系统指令 系统指令大部分都是以ng开始,这也是为什么在自定义指令命名时不要以ng开始的原因所在 系统指令在学习了分成两个部 ...
- 《Visual C# 从零开始学》
书名 <Visual C# 从零开始学> 图片 时间 2017年4月-5月 学习 对c#的基础语法有了一个较为完全的了解,总体还算顺利没有遇到理解不了的,感觉最好上手的是做windos窗体 ...
- 菜鸟入门【ASP.NET Core】11:应用Jwtbearer Authentication、生成jwt token
准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSampl ...
- asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值
后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...
- FireFox升级后FireBug不能使用
今天发现,火狐浏览器从49.0.2升级到50.0.2之后,firebug的js调试被禁用了,果断去找49.0.2的版本. 链接: https://ftp.mozilla.org/pub/firefox ...
- 【Mybatis】1、Mybatis拦截器学习资料汇总
MyBatis拦截器原理探究 http://www.cnblogs.com/fangjian0423/p/mybatis-interceptor.html [myBatis]Mybatis中的拦截器 ...
- blfs(systemd版本)学习笔记-前几章节的脚本配置
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 记录blfs书籍前几个章节的配置内容. bash shell启动文件章节 1.切换root用户 su 2.创建/etc/prof ...