iOS 系统分享 -------- Share Extension

前段时间,项目要求把系统相册的照片分享到应用中,后来看了下iOS8的新特性Extension的分享功能,虽然网上有很多说明的文章,但在实际开发过层中仍然遇到很多坑,金总结下,一来方便他人,二来留着备忘。

先看实现效果图

《iOS 系统分享 -------- Share Extension》 第一步点击系统相册分享按钮

《iOS 系统分享 -------- Share Extension》 第二步选择自己的应用
《iOS 系统分享 -------- Share Extension》 第三步弹出输入框
《iOS 系统分享 -------- Share Extension》 第四步输入内容
《iOS 系统分享 -------- Share Extension》 第五步点击发送
《iOS 系统分享 -------- Share Extension》 第六步发送完成、再给用户一个提示

接下来看如何实现

1.在自己的项目工程中添加Extension的分享扩展

《iOS 系统分享 -------- Share Extension》 添加扩展的过程

《iOS 系统分享 -------- Share Extension》 选择分享扩展

接下来一步一步点next即可。创建好扩展之后,项目中会多出一个子项目的,这就是分享的扩展。

2.分享扩展创建好之后,在该分享扩展中会有系统给我们自动生成的一个controller类ShareViewController,我们在viewDidLoad中做相应的数据处理,这里需要把上传服务器的数据处理好,还有些逻辑判断,比如用户是否登录,用户登录的令牌是否失效,用户是否有发布图片的功能等待。如何处理用户选择的照片数据,系统已经给我们提供来处理图片数据的方法

《iOS 系统分享 -------- Share Extension》 获取用户选择的照片信息

3.数据准备好来,接下来就向服务器发送图片数据。系统也为我们提供好来发送方法

《iOS 系统分享 -------- Share Extension》 点击发送按钮触发的方法

由此整个流层就走完了,但是还有个比较蛋疼的问题就是这个分享扩展不能直接获取主工程项目的数据 泪奔。

4.扩展项目获取主工程的数据。

App Groups。我们在主工程和分享扩展中要配置App Groups,通过该配置获取主工程的数据。App Groups怎么配置的就不在这里描述了。通过App Groups获取数据的方式也很简单,和平时用到的NSUserDefaults不同的地方就是创建的时候, NSUserDefaults*extension = [[NSUserDefaultsalloc]initWithSuiteName:@”group.xxx”]; 获取和设置数据都和平时的NSUserDefaults一样的。扩展程序是寄生在主工程中的,但又不能用主工程中的类库,自己用到什么类库就只能单独导入了。

5.扩展项目的配置

我们需要在扩展项目的info.list中配置我的分享扩展支持的分享类型,比如支持图片、视频、网友等等,也可以配置分享类型支持的分享数量。下图只是支持图片的分享数量

《iOS 系统分享 -------- Share Extension》

最后补充一点,分享扩展的版本号要和主工程的版本号保持一致。

    原文作者:一个人一匹马
    原文地址: https://www.jianshu.com/p/5d965469348c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞