社交网络编程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).你需要在你 ...
随机推荐
- 给mysql添加一个只有某个数据库查询权限的用户
添加用户: insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values ("1 ...
- JavaWeb学习 (二十八)————文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- netty源码解解析(4.0)-12 Channel NIO实现:channel初始化
创建一个channel实例,并把它register到eventLoopGroup中之后,这个channel然后处于inactive状态,仍然是不可用的.只有在bind或connect方法调用成功之后才 ...
- netty源码解解析(4.0)-9 ChannelPipleline的默认实现-链表管理
io.netty.channel.DefaultChannelPipeline implements ChannelPipleline DefaultChannelPiple给出了ChannelP ...
- 【学习笔记】JS经典异步操作,从闭包到async/await
参考文献:王仕军——知乎专栏前端周刊 感谢作者的热心总结,本文在理解的基础上,根据自己能力水平作了一点小小的修改,在加深自己印象的同时也希望能和各位共同进步... 1. 异步与for循环 抛出一个问题 ...
- S5PV210中断体系结构分析
我们按照Tiny210官方的裸板程序来梳理S5PV210的中断体系. 关于 S5PV210 的中断体系结构 S5PV210 的中断控制器是由 4 个向量中断控制器(VIC). ARM PrimeCel ...
- 动态规划法(四)0-1背包问题(0-1 Knapsack Problem)
继续讲故事~~ 转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了.这天晚上,妈妈正在耐心地帮丁丁收拾行李.家里有个最大能承受20kg的袋子,可是妈妈却有很多东西想装袋子里,已知行李的编 ...
- DotNetCore学习-1.读取Json配置并绑定到配置类实例
DotNetCore的程序的配置不再完全局限于XML文件,增加更加通用的Json配置. 读取Json配置文件的类主要在Microsoft.Extensions.Configuration命名空间下,创 ...
- SQL SERVER 如何判断是不是年,月最后一天
, SYSDATETIME())) PRINT '不是'; ELSE PRINT '是'; GO , SYSDATETIME())) PRINT '不是'; ELSE PRINT '是'; GO 1. ...
- Morley's Therorem(UVA11178+几何)
题意:Morley定理,求D.E.F的坐标 思路:没什么算法,就是几何的应用.注意旋转角就好了. 转载请注明出处:寻找&星空の孩子 题目链接:UVA11178 #include<cstd ...