趁热来一波,WWDC 2016 iMessage App开发

字数2156 阅读3420 评论14 喜欢37

WWDC 2016关于iMessage App的两个视频已经放出(iMessage Apps and Stickers, Part1 iMessage Apps and Stickers, Part2)。从iOS 10开始,消息扩展(Messages Extension)可以独立于宿主App(Container App)开发,并且提供了全新的消息模式,开始支持iap和Apple Pay等等。iMessage App有充足的理由让我们兴奋,用现在流行的话来讲,iMessage App将会是一个“风口”。

本文主要是对最新的WWDC关于iMessage App视频的翻译和笔者的个人理解,英文好的童鞋还是推荐看WWDC的视频资料。阅读本文之前,需要读者掌握基本的iOS Extension知识,可以参考iOS App Extension入门


iMessage App简介

iMessage App是一种全新的应用扩展,载体是iOS系统的Message应用,通过iMessage App,用户可以发送更加丰富的消息内容,享受更具交互性的会话体验。我们来看看它都有什么新鲜玩意:

新增三种类型

  • Stickers

  • Interactive Messages

  • 可以发送图片,音视频,文本,链接等等

Messages App Store

就是这货:

Messages App Store

用来干什么的呢?

  • 显示iMessage App;

  • 为未安装应用的用户提供安装途径(Inline App Attribution);

  • 提供iap,Apple Pay和访问相机功能。

iMessage App只能在iOS(10+)系统运行,iWatch和mac可以收到消息,但是不能解析。iWatch可以发送Stickers。

iMessage App本身是一个Extension,但是它可以独立开发,不依赖任何Container App。我们也可以在现有的项目中添加iMessage App,系统会自动将其添加到Messages App Store。
如果不想创建Container App,在Xcode 8中,直接创建一个Messages Application(File->New->Project->Application->Messages Application);在现有项目中添加iMessage App,可以通过添加Extension的方式添加(File->New->Target->Application Extension->Messages Extension)。


Stickers

Sticker是iOS 10 iMessage引入的一种新的交互方式,可以当做消息发送,也可以附加在已有消息上,支持PNG,APNG,GIF,JPEG的图片格式(推荐使用PNG或APNG格式),图片大小最大500KB。

Stickers的创建非常简单,首先创建一个Sticker Pack Application(File->New->Project->Application->Sticker Pack Application),然后在Assets.xcassets中添加一个Sticker Pack,然后添加相应的资源文件即可。Sticker Pack Application不需要任何代码,当用户在Messages App Store中打开我们的Messages App时,系统会自动将图片资源显出。系统为Stickers提供了三种尺寸:Large,Medium,Small,我们可以在Sticker Pack中进行设置

sticker size

Custom Sticker

自定义Stickeryou 有如下优势:

1.自定义UI

2.可以动态改变Sticker

3.可以使用相机功能

4.支持IAP

自定义Sticker需要创建一个Messages Application。Messages Application会自动生成一个Sticker Pack和一个Messages Extension,如下图:

Messages Application Project

如果想在已有项目中添加Sticker,只能添加一个Messages Extension,然后用自定义Sticker的方法来实现。

自定义Sticker需要我们自己控制Sticker的显示,所以我们不在Assets.xcassets中添加stickers,我们需要修改MessagesExtension中的MessagesViewController
MessagesViewControllerMSMessagesAppViewController的子类,后者是iMessage App中一个重要的组建,它的生命周期我们会在后面介绍,在此我们只需要知道MessagesViewController就是iMessage App的显示界面。

想要自定义Sticker,需要自定义MSStickerBrowserViewControllerMSStickerBrowserViewController顾名思义,是用来显示Sticker的,我们将MSStickerBrowserViewController添加到MessagesViewController,这样我们的iMessage App的显示界面就是Sticker的界面了。

MSStickerBrowserViewController中重写如下两个方法:

@protocol MSStickerBrowserViewDataSource <NSObject>
- (NSInteger)numberOfStickersInStickerBrowserView:(MSStickerBrowserView *)stickerBrowserView;//返回Sticker数量
- (MSSticker *)stickerBrowserView:(MSStickerBrowserView *)stickerBrowserView stickerAtIndex:(NSInteger)index;//返回MSSticker对象

MSStickerBrowserViewDataSource的用法跟UITableViewDataSource很像,甚至连reloadData都很像。MSStickerBrowserViewController有一个stickerBrowserView对象

@property (nonatomic, strong, readonly) MSStickerBrowserView *stickerBrowserView;

刷新数据的时候,调用[stickerBrowserView reloadData](是不是跟tableView的reloadData很像!)

/*!@abstract Asks the Sticker Browser View to reload its data from its data source.*/
- (void)reloadData;

细心的读者可能已经发现,MSStickerBrowserViewDataSourceUITableViewDataSource有一个不同的地方:
- (MSSticker *)stickerBrowserView:(MSStickerBrowserView *)stickerBrowserView stickerAtIndex:(NSInteger)index返回的是一个MSSticker,而- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath返回的是一个UIView
其实,这是MSStickerBrowserViewController帮我们做的一层额外封装,真正显示的是一个叫MSStickerView的view。由此可以发现,自定义Sticker不一定非要用MSStickerBrowserViewController,我们也可以用一个普通的UIViewController,在显示Sticker的地方,我们只需要用MSStickerView就可以了。

附一张视频中的截图,方便大家理解

custom sticker demo


Interactive Messages

交互型消息(Interactive Messages)是一种特殊的消息类型,由图片、文字、音视频等组成,用户可以对该消息进行交互操作(由iMessage App定义)。

交互型消息由消息扩展(Message Extension)显示和创建,之后由用户主动发送出去;接受者收到消息之后可以点击查看,进行交互操作,并且可以回复消息。这些步骤都在MSMessagesAppViewController中完成。

在我们深入了解之前,先来认识几个关键对象。

  • MSMessagesAppViewController

    我们在上面已经介绍过了MSMessagesAppViewController,它用来展示消息扩展(Message Extension)的界面。

    MSMessagesAppViewController

MSMessagesAppViewController有两种展现方式:

  • Compact-MSMessagesAppPresentationStyleCompact
  • Expanded-MSMessagesAppPresentationStyleExpanded

    在Compact模式下,不能访问键盘和相机,同时也不能使用横向滑动操作(Compact模式下,横向操作会由系统捕获),但是可以访问用户输入框。

    Compact Style

    在Expanded模式下,我们不能访问用户输入框,但是可以访问键盘、相机,并且可以使用横向滑动操作。

    Expanded Style

  • MSConversation

    MSConversation指当前的会话,我们可以通过MSConversation“发送消息”(这里的发送消息并不是真正的发送消息,只是把消息添加到输入框中,真正的消息发送是用户点击发送按钮完成的),获取会话的用户信息等。

    MSConversation

  • MSMessage

    MSMessage是消息体,它包含两个主要部分

    • MSSession用来描述消息如何发送;
    • MSMessageLayout用来描述消息如何展示

    MSMessage


iMessage App LifeCycle

理解了上面的概念,我们来看下Message App的生命周期。

  • 启动过程:

    1. Message Extension启动
    2. - (void)didBecomeActiveWithConversation:(MSConversation *)conversation;
    3. - (void)viewWillAppear:(BOOL)animated;
    4. - (void)viewDidAppear:(BOOL)animated;
  • 销毁过程:

    1. - (void)viewWillDisappear:(BOOL)animated;
    2. - (void)viewDidDisappear:(BOOL)animated;
    3. - (void)willResignActiveWithConversation:(MSConversation *)conversation;
    4. Message Extension被系统销毁

上面列出的回调方法均出现在MSMessagesAppViewController中,可见,iMessage App的生命周期就是MSMessagesAppViewController的生命周期。当启动Message Extension之后,系统会立刻调用- (void)didBecomeActiveWithConversation:(MSConversation *)conversation;方法,在MSMessagesAppViewController被用户关闭或通过其它方式dismiss之后,会执行- (void)willResignActiveWithConversation:(MSConversation *)conversation;,之后系统随时可以终止Message Extension(一般情况下会立刻终止)。

除此之外,还有一个特殊的过程:

  • 唤起过程:

    1. -(void)willTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle;
    2. -(void)didTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle;

唤起过程发生在MSMessagesAppViewControllerpresentationStyle发生变化时。

PS:Message Extension启动的时候,总是以Compact Style的方式显示。

创建 MSMessage

MSMessage就是消息本身,我们可以通过修改MSMessage的属性来决定消息的展示内容。消息的展现方式由MSMessageLayout决定,不过MSMessageLayout是一个抽象类,目前系统只提供了一种展现方法MSMessageTemplateLayout,如下图

MSMessageTemplateLayout

我们可以设置MSMessageURL属性,用来描述消息内容。因为iMessage App只能在iOS系统运行,mac收到该消息之后不会解析消息内容,如果用户点击该消息并且URL是http(s)类型的,系统会通过浏览器打开相应的页面。

“发送 Message”

我们所说的“发送 Message”实际上是添加消息到用户输入框。这一过程由MSConversation完成。在MSMessagesAppViewController中我们可以通过成员变量activeConversation获取当前的MSConversation,随后可调用一下方法插入不同的消息。

- (void)insertMessage:(MSMessage *)message localizedChangeDescription:(nullable NSString *)changeDescription completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
- (void)insertSticker:(MSSticker *)sticker completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
- (void)insertText:(NSString *)text completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
- (void)insertAttachment:(NSURL *)URL withAlternateFilename:(nullable NSString *)filename completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;

其中第一个方法添加的是交互型消息,其余三个依次添加Sticker,文本以及音视频。


今天到此为止,WWDC视频还提到了MSSession,如何聚合消息,获取会话者信息等,我们以后再聊!建议大家去认真看下原版视频!最后,如果你觉得本文对你有帮助,请点赞

趁热来一波,WWDC 2016 iMessage App开发相关推荐

  1. iMessage app 开发

    说在前面: iMessage app 是iOS10中嵌入到Message内容的iMessage apps,包含简单的表情包以及自定义的复杂界面. iMessage App类别: * Sticker p ...

  2. WWDC 2016 盛宴

    转自:http://www.jianshu.com/p/72dd8306c817 整理和维护人:pmst GitHub 链接:WWDC-2016-Feast 目前只是整理官方给出的 WWDC 2016 ...

  3. App Store审核条款更新:WWDC 2016重写版本

    WWDC2016大会之后,苹果公司发布了四个全新平台:iOS,macOS,watchOS和tvOS.并且在此之后,苹果应用商店审核条款也同时进行了更新--貌似不算进行了更新,简直就是重写!上个版本的3 ...

  4. WWDC 2016 总结

    一年一次的WWDC,是开发者充值信仰的时刻,今天你的信仰充值了吗?欢迎在本文下面留言吐槽. 有外媒称,这届WWDC苹果将"fun"伪装成"innovation" ...

  5. 我们可以从WWDC 2016中学到什么?

    科技圈的「春晚」--WWDC 2016即将于太平洋时间6月13日上午10点(北京时间6月14日凌晨1点)正式开始.从技术范儿的官网设计.海报到邀请函等,无一不是Swift语言的「风」「髓」所在. Ph ...

  6. SiriKit 初探 —— WWDC 2016 技术赏析

    2016 年 9 月 23 - 24 日,由 CSDN 和创新工场联合主办的"MDCC 2016 移动开发者大会• 中国"(Mobile Developer Conference ...

  7. WWDC之优化App启动速度

    原文链接 前言 在WWDC 2016上首次提到了关于App应用启动速度优化的话题:Session 406 Optimizing App Startup Time .该Session上Apple建议一个 ...

  8. 2016中国APP分类排行榜发布暨颁奖晚宴 —— 兰亭修禊少长有王谢 黔香阁暖高见望诸公...

    天下高见,多有相合--惊喜的构想只需要1分钟,而惊人的产品却需要许多共性内涵 2016年7月5日晚,由中国科学院<互联网周刊>.中国社会科学院信息化研究中心.eNet硅谷动力共同主办的20 ...

  9. 『电子书』分享一波码农必备编程开发类书籍[转]

    分享一些书籍 看到书籍很多,感觉很不错,就收藏下来了,是百度盘的连接,失效的可以评论一下以此更新一下连接. 书籍清单 Python编程快速上手 细说PHP(第2版) Python核心编程(第3版) L ...

最新文章

  1. Makefile所有内嵌函数
  2. MySql8.0.16安装
  3. 安装ESXi5.5遇到Relocating modules and starting up the kernel的处理
  4. python 内推_网易有道2017内推编程题 洗牌(python)
  5. 用python爬虫的基本步骤-Python爬虫入门:爬虫基础了解
  6. robo3t设置密码链接
  7. 普通树与二叉树的相互转化及哈夫曼树的了解
  8. Adobe_Audition消除人声
  9. 如何在有限的时间内编写完整有效的测试用例?
  10. Windows核心编程_实现QQ好友来消息时任务栏头像闪烁功能
  11. 详细版【循环神经网络RNN】(邱锡鹏)
  12. python 通达信公式函数_通达信,文华财经,非常实用的主图均线变色指标
  13. word计算机计算公式求总和,word2010如何算总和 word中如何在表格中计算总和
  14. Linux的FTP安装、使用和配置(FTP客户端管理工具)
  15. 申宝投资-昨日三大指数缩量探底回升
  16. cubieboard 资源
  17. 重庆文理学院计算机公众号,重庆文理学院各微信公众号影响力排行榜新鲜出炉啦!!!...
  18. Kotlin-Android世界的一股清流-Lambda表达式
  19. python实现图像的白平衡,破坏图像的白平衡(冷、暖)和调节图像的亮度
  20. 2021高校毕业生薪酬Top100出炉 !

热门文章

  1. After Effects Guru: Expressions After Effects 大师教程之表达式 Lynda课程中文字幕
  2. 豆瓣评分小程序Part-2
  3. 源代码开发企业要如何进行代码加密,自主知识产权维护刻不容缓
  4. 苹果服务器 系统安装教程视频,苹果安装win10系统图文教程
  5. PC端微信加群测试用例
  6. Tableau可视化(神仙般绘图)——糖潮丽子的博客
  7. 忆327国债期货大厮杀(包括国债期货的基本原理)
  8. 华为手机百度云息屏后停止下载_手机刷机已死,手机为什么不能刷机了?
  9. 中国手机充电线行业深度调研与发展趋势预测研究报告
  10. 十大iPhone防盗应用