Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

[iuud8]ios10之iMessageApp,Part2

$
0
0

Interactive Messages

Interactive Messages(交互消息),顾名思义,它允许用户对其进行交互性操作。

Message API Overview

MSMessagesAppViewController:这个视图提供了消息扩展的用户界面(providing your extension's UI)。


[iuud8]ios10之iMessageApp,Part2

它拥有两种表现形式:

public enum MSMessagesAppPresentationStyle : UInt {

case compact

case expanded

}


[iuud8]ios10之iMessageApp,Part2

在Compact模式中,不能访问键盘;也不能左滑或者右滑,那实质上相当于切换了iMessage App;可以访问到用户输入框,用户可以不停的插入新的消息并且取代旧的那一个。在Expanded模式中,可以访问到键盘;也可以使用横向的滑动;但是不能访问到用户输入框;当两种模式开始切换的时候会调用:

open func willTransition(to presentationStyle: MSMessagesAppPresentationStyle)

当两种模式切换完成的时候调用:

open func didTransition(to presentationStyle: MSMessagesAppPresentationStyle)

获得指定的模式:

open func requestPresentationStyle(_ presentationStyle: MSMessagesAppPresentationStyle)

取消iMessage App并且展示键盘

open func dismiss()

MSConversation:这个API提供了发送消息与获取会话信息的功能


[iuud8]ios10之iMessageApp,Part2

MSMessage:之所以能有这个消息球在这边展示,就是MSMessage的功能了。可以看到它由两部分组成,MSSession与MSMessageTemplateLayout。它们分别用于控制消息如何发送以及消息如何展示。


[iuud8]ios10之iMessageApp,Part2

iMessage Extension Lifecycle

它的启动过程:


[iuud8]ios10之iMessageApp,Part2

它的销毁过程:


[iuud8]ios10之iMessageApp,Part2

Compose a Message

消息由类MSMessage定义。它拥有以下属性: url:URL类型。它用来描述消息内容,但是在mac中这个链接不会被解析,只会通过浏览器来打开展示。 accessibilityLabel:对消息的描述,使用户可以在看到消息的同时获取到足够的描述信息。


[iuud8]ios10之iMessageApp,Part2

layout:MSMessageLayout类型。它可以控制消息的展现形式,通过设定不同的子类可以实现不同的展现方式,但是,目前系统只提供MSMessageTemplateLayout一种展示方法,属性如下:

image:用来展示图片,图片展示区域为上图的粉色部分。

mediaFileURL:拥有与image相同的展示区域,当image不足以支持想要展示的内容时,就可以使用该属性。比如说本地的短视频啥的。同时它也支持PNG,JPEG,GIF等格式。

需要注意的是:当image与url都提供的时候,image的优先级要高于url;其次,为了避免因为缩放导致的一些问题,例如清晰度啥的,尽量避免直接在图片上渲染文字,系统为我们提供了解决方案:

imageTitle:文本类型,展示文字。。。

imageSubtitle:文本类型,展示文字。。。

其他的还有下边标题栏四个属性:


[iuud8]ios10之iMessageApp,Part2

需要注意的是,如果这四个属性都置为nil,则标题栏消失:


[iuud8]ios10之iMessageApp,Part2

Send a Message

这里所说的“发送消息”,应该说成是“把消息添加到用户输入框”更合适些。要做到这样,需要一个MSConversation实例。它可以通过MSMessagesAppViewController的activeConversation获得。一旦有了这个实例,就可以写入消息,传递消息,并且获得返回的错误等。

可以传递以下各种类型的消息(交互型消息,sticker,text,音视频):

open func insert(_ message: MSMessage, completionHandler: (@escaping (Error?) -> Swift.Void)? = nil)

open func insert(_ sticker: MSSticker, completionHandler: (@escaping (Error?) -> Swift.Void)? = nil)

open func insertText(_ text: String, completionHandler: (@escaping (Error?) -> Swift.Void)? = nil)

open func insertAttachment(_ URL: URL, withAlternateFilename filename: String?, completionHandler: (@escaping (Error?) -> Swift.Void)? = nil)

当这些做了以后用户就可以点击“发送”来发送消息,需要注意的是:There's no way for your extension to actually automatically send a message and we always want the user to have the final say as to what gets send to their friends.

Replying to a Message

关于回复消息存在两种情况:Extension is inactive与Extension is active


[iuud8]ios10之iMessageApp,Part2

当Extension is inactive时,用户点击聊天气泡的时候,Message Extension立刻启动,进程当即被激活。即在上面介绍的iMessage Extension Lifecycle部分,启动过程最前面加上一个Bubble Tapped的流程。当最后viewDidAppear执行以后,app就进入了Expanded模式。

当Extension is active时,app处于compact style。用户点击聊天气泡,然后Message Extension激活。它不会调用willBecomeActive或者didBecomeActive。相反,它会调用willTransition()将要切换到expanded style;然后调用didSelect函数,表明是哪个对话的哪个消息被选中;最后会调用didTransition()函数并成功切换到expanded style。


[iuud8]ios10之iMessageApp,Part2

无论是Extension是inactive还是active,当时间线结束以后你都可以通过在MSMessagesAppViewController中调用MSConversation的selectedMessage函数来获得被点击的消息。

Session Messages


[iuud8]ios10之iMessageApp,Part2

[iuud8]ios10之iMessageApp,Part2

上面两个图分别展示了是否使用MSSession形成的不同效果,左图是未使用,右图是使用。可以对比出当未使用MSSession时会出现大量的未完成的图片以及对话框,,使用了的相对就简洁许多。当我们发送第一个消息时,创建并初始化一个MSSession对象,接下来,当回复这个消息时,不再创建新的MSSession,而是通过activeConversation的selectMessage来获取到已存在的session。通过设置message的summaryText来给予一个概要信息,例如


[iuud8]ios10之iMessageApp,Part2

当这个值被设置为nil时,则不会有那个概要信息的提示


[iuud8]ios10之iMessageApp,Part2

Advanced Messages API

用户点击发送按钮时候回调:


[iuud8]ios10之iMessageApp,Part2

[iuud8]ios10之iMessageApp,Part2

**************************************算了,网络好差,心情好差,不想写了


Viewing all articles
Browse latest Browse all 6262

Trending Articles