zoukankan      html  css  js  c++  java
  • 社交网络编程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];
    
        }
    
    }
    

      

  • 相关阅读:
    cesium【02-小部件】
    cesium【01-初始化】
    【01】webpack4 快速上手
    【11】openlayers 地图交互
    【10】openlayers 视图view
    【09】openlayers 图片图层
    【08】openlayers 热力图层
    【07】openlayers 矢量图层
    测试从业人员常用的数据库技能整理
    基于web网站项目的性能测试结果分析
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4677087.html
Copyright © 2011-2022 走看看