我们在iOS平台上想要实现不同App之间的内容分享一般有几种常用方式:
第一种是通过AirDrop实现不同设备的App之间文档和数据的分享;
第二种是给每个App定义一个URL Scheme,通过访问指定了URL Scheme的一个URL,实现直接访问一个APP;
第三种是通过UIDocumentInteractionController或者是UIActivityViewController这俩个iOS SDK中封装好的类在App之间发送数据、分享数据和操作数据;
第四种是通过App Extension,在iOS 8的SDK中提供的扩展新特性实现跨App的数据操作和分享;
还有一种集成第三方SDK实现的有限个App的数据分享,比如社交平台(QQ,微信,新浪微博等)给我们提供的官方SDK,或者是集成了多个社交平台的ShareSDK组件和友盟分享组件等。
谈谈苹果原生提供的基于iOS SDK的分享技术,同时推荐俩篇苹果开发者中心的文档:Inter-App Communication和Document Interaction Programming Topics for iOS。
谈一下如何通过UTI让我们的App支持分享。
原理
参考详解苹果提供的UTI(统一类型标识符)这篇文章中,详细地讲解了一下UTI(Uniform Type Identifier),一套苹果给我们提供用来在基于Cocoa和Cocoa Touch应用程序中识别实体内容类型的规范,而关于实现内容关联的技术也正是基于这套规范。在iOS和Mac OS开发中,苹果给我们提供了注册文档类型的接口,而这种注册的文档类型是全局的,系统中所有的应用程序和服务都可以侦测到。因此我们通过这个底层侦测,可以使用其他可选的第三方App来预览我们的App中不支持的文档,而且我们还可以通过这个接口在我们的App中打开并处理第三方App的文档。

如果我们的App可以处理某些类型的实体内容,那么我们就可以在我们项目中的Info.plist文件中进行注册。关于使用哪种类型和UTI,就要参考我在“详解苹果提供的UTI(统一类型标识符)“这篇文章中的讲解。当一个第三方App通过苹果的底层侦测技术检查有哪些App可以处理它所指定的内容类型时,如果我们的App已经注册了这种类型,那么我们的App图标就会显示在其中,并且作为我们自己的App的一个入口。
主要技术
主要应用到这种底层侦测的技术有iOS SDK中给我们提供的UIDocumentInteractionController、UIActivityViewController 和Quick Look 框架。此外,在iOS 8中,苹果又给开发者提供了App Extension,一种更高大上的方式在App之间的实现分享内容。关于UIDocumentInteractionController、UIActivityViewController、Quick Look 框架以及App Extension的细节,我计划在后面的文章中详细讲解。这篇文章,我们主要是来谈谈如何注册我们App可用的文档类型以及简单使用我们的App来处理第三方App分享的内容。

注册可用类型
我们需要在info.plist文件中,添加一个新的属性CFBundleDocumentTypes(实际上输入的是”Document types”),这是一个数组类型的属性,意思就是我们可以同时注册多个类型。而针对数组中的每一个元素,都有许多属性可以指定,详细的属性列表我们可以从官方文档上找到: Core Foundation Keys —- CFBundleDocumentTypes。这里列举我们在做iOS开发时常用的属性

- CFBundleTypeName(“Icon File Name”)
字符串类型,指定某种类型的别名,也就是用来指代我们规定的类型的别称,一般为了保持唯一性,我们使用UTI来标识。
- CFBundleTypeIconFiles
数组类型,包含指定的png图标的文件名,指定代表某种类型的图标,而图标有具体的尺寸标识:

|Device |Sizes |
|:------|:---------|
|iPad |64 x 64 pixels, 320 x 320 pixels|
|iPhone and iPod touch|22 x 29 pixels, 44 x 58 pixels (high resolution)|
  • LSItemContentTypes(“Document Content Type UTIs”)
    数组类型,包含UTI字符串,指定我们的应用程序所有可以识别的类型集合

  • LSHandlerRank(“Handler rank”)
    字符串类型,包含Owner,Default,Alternate,None四个可选值,指定对于某种类型的优先权级别,而Launcher Service会根据这个优先级别来排列显示的App的顺序。优先级别从高到低依次是Owner,Alternate,Default。None表示不接受这种类型。
    而当我们添加完所有属性后,开始运行我们的程序,然后再回到我们的Info界面,就会看到Document types这个列表已经发生了变化,这就证明我们成功的注册好了App可用的类型。

打开第三方应用
我们在上面的步骤中注册好了我们的App可以识别的类型,现在我们可以打开一个使用UIDocumentInteractionController或者是Quick Look框架来展示内容的第三方App,这里以iPhone 上的QQ程序为例。

我们在上面的注册步骤中,注册的LSItemContentTypes仅包含了public.data这个UTI。所以我们先从QQ应用程序的我的文件中,打开不同类型的文件进行对比,大家可以看下图我的文件列表中包含俩种类型的文件,一种是.jpg扩展名的图片文件,一种是.pdf扩展名的文档文件。


当我打开一个图片文件进行预览时,点击其他应用打开,就可以在App列表中看到我们的App图标。简单介绍一下这个页面,第一行是苹果在iOS 7之后给我们提供的使用AirDrop在iPhone、iPad或iPod Touch设备之间通过iCloud共享内容的一种方式。第二行是通过文档类型关联技术识别的App的列表。第三行是通过文档关联技术识别的Action的列表,Action表示对文档可进行的操作,如复制,打印等。
程序回调
当我们通过上面步骤,成功地显示了我的app图标之后,点击图标,我们就可以跳转到我的应用中,而苹果在iOS SDK中给我们提供的接收回调的方法在iOS 9之后做出了改变,因此我们需要针对不同的设备版本做出改变:



参考原地址

iOS实现App之间的分享相关推荐

  1. iOS实现app之间的内容分享总结

    iOS实现app之间的内容分享总结 说到iOS实现app之间的内容分享,第一印象就是社会化分享,然后就是QQ.微信.微博等的第三方分享SDK,当然现在也有很多做社会化分享集合的,例如友盟分享.Shar ...

  2. iOS APP与APP之间的通信方式

    为什么80%的码农都做不了架构师?>>>    1.URL Scheme 这个最常见了,基本接入分享.支付.地图的,都会用到 2.UIPasteboard 其实就是粘贴板,常见的就是 ...

  3. iOS日常学习 - App之间常用的五种通信方式及适用场景总结

    本文为转载学习,原文地址 iOS系统是相对封闭的系统,App各自在各自的沙盒(sandbox)中运行,每个App都只能读取iPhone上iOS系统为该应用程序程序创建的文件夹AppData下的内容,不 ...

  4. Android和iOS手机APP开发之间的差异

    开发APP是一项具有挑战性的高级任务.由于移动电话的普及,终端用户的普及以及不断变化的业务需求,它正在快速增长.根据Statista调查,智能手机用户数量预计将在2018年达到25.3亿以上.预计到2 ...

  5. IOS开发之App之间的拉起和跳转

    我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信.淘宝.京东等App页面,如下图所示: 那么IOS是如何实现App之间的跳转呢?今天就来学习一下. URL Scheme: IOS在系统层面为我 ...

  6. apicloud的ios和Android,APICloud开发者进阶之路|自己App加入系统分享

    最近做一个把自己App加入系统分享的功能,分享一下自己踩坑的记录和成果: 安卓可以加入系统相册和文件管理器的分享菜单中:ios目前只做到了加入在其他应用里调起系统分享的菜单. 1.Android先配置 ...

  7. ios俩个APP之间跳转、传值

    两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...

  8. ios两个app之间传值和跳转实现(转发)

    两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...

  9. 10个最佳iOS Photo App模板

    您对制作照片应用感兴趣吗? 应用模板可以使您的梦想成真. 无论您是要构建用于照片编辑的应用程序,向照片添加文本还是创建自己的社交媒体照片应用程序,这里都有一个照片应用程序模板. 出色的iOS照片应用程 ...

最新文章

  1. MaxScale Binlog Server
  2. CSAPP lab2 二进制拆弹 binary bombs phase_6
  3. 移动硬盘计算机无法打开硬盘,移动硬盘无法识别
  4. 苹果cms V10模板 手机端模板粉红色模板带会员中心
  5. 初学Java必须知道的几件事
  6. ACCESS网上书店数据库系统
  7. matlab画图时候图例混乱解决方法
  8. C#中路径表示\ 和 /
  9. Deep-Learned Regularization and Proximal Operator for Image Compressive Sensing
  10. JVM垃圾回收器G1详解
  11. 光纤跳线、尾纤、光纤连接器之间有什么区别
  12. 基础、开发者、智能合约……统统都是矩阵元未来的关键词
  13. vue 移动端头像裁剪_移动端 上传头像 并裁剪功能(h5)
  14. html中测试心理测试的代码,趣味心理测试源码、心理测试_心理测评微信小程序版...
  15. vs.net发送邮件(2.0)
  16. 『MongoDB』快速安装MongoDB运行环境
  17. MarkDown笔记20200428
  18. 奥比中光相机的python采集代码
  19. Ehab and Path-etic MEXs
  20. 精益生产:现代企业生产管理变革的必然选择(zt)

热门文章

  1. DevOps 工程师成长日记系列四:打包
  2. ModelState.IsValid忽略型别的检查错误
  3. 诚之和:字节再迎裁员潮温州百人“大撤退”、ohayoo应届生“团灭”
  4. 自动驾驶仿真平台Carla从入门到放弃
  5. 你的微商城可以成为微商中的Top吗?
  6. 使用xpath爬取学院新闻
  7. 在php中利用gd2库的函数创建水印
  8. 微信开发者工具中的版本管理功能搭配gitee使用
  9. oracle查询大于某个日期的数据,查看某天(或某个时间区间)的数据,请别用between ... and ......
  10. AppsFlyer的测试