社交网络编程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).你需要在你 ...
随机推荐
- 自己实现的ajax分页js
/** * 分页 * @author chenqionghe * @param data json数据,包含totalPage,count * @param page 获取的页数 * @param o ...
- set get del
//设置 $ob = new Redis(); $ob->connect('127.0.0.1', 6379); $re = $ob->set('str1', serialize(['a' ...
- Django之FBV与CBV
一.FBV与CBV FBV(function based views),即基于函数的视图:CBV(class based views),即基于类的视图,也是基于对象的视图.当看到这个解释时,我是很萌的 ...
- SQL while循环
ALTER Proc [dbo].[p_GetServerDataCursor] AS BEGIN IF EXISTS ( SELECT * FROM sys.objects WHERE object ...
- jQuery文档操作方法对比和src写法
jQuery文档操作方法对比 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- TCP服务器/客户端代码示例
TCP服务器代码: #include <errno.h> #include <string.h> #include <stdlib.h> #include < ...
- js查询数组或者List类型是否包含某个元素
方法一:arr.indexOf(某元素) 实际用法:if(arr.indexOf(某元素) > -1){//则包含该元素} 例: var fruits = ["Banana" ...
- yum 安装 php5.6.36
PHP安装测试可以 rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm; rp ...
- Go开发之路 -- Go语言基本语法 - 作业
1. 判断101 - 200之间有多少个素数,并输出所有素数. package main import ( "fmt" ) var count = 0 func prime(a, ...
- spring项目获取ServletContext
(1)生命周期 ServletContext中的属性的生命周期从创建开始,到服务器关闭而 (2).获取ServletContext 1.request获取servletContext ServletC ...