iOS10推出了以iMessage为载体的iMessage App,并为其专门提供了新的app store。丰富了用户的信息交流,支持相册,视频拍摄,表情包甚至小游戏,就像一个微型的app了。iMessage App不仅可以独立创建也可以依附于宿主App,作为插件的一种。对于开发者来说如果用户因为喜欢你的表情包下载了iMessage app,你的宿主app也会被下载到手机上。同时如果下载了你的App,而且App带有iMessage App在用户的iMessage里面会自动出现。这增加了你App的曝光率,可以吸引更多的用户。
iMessage App的展现方法有三种:
- sticker 表情包
- interactive messages 交互式信息,比如把某个点菜app的菜单发给对方,对方可以点完菜再发送给你
- other content 支持其他类型的内容 图片,音视频,文本,链接等
Sticker
sticker可以以一种非常简单的方法创建,不需要写一行code就能出现这样的表情包
你只需要在Assets的文件夹里面提供图片就可以了。但是对于图片的大小官方时有要求的:
- Small:100x100pt@3x
- Medium:136x136pt@3x
- Large:206x206pt@3x
这三种大小,它会根据图片的大小分配不同的grid。
当然我们也可以自定义UI,通过继承MSStickerBrowserViewController
类,实现它的回调
-(NSInteger)numberOfStickersInStickerBrowserView:(MSStickerBrowserView *)stickerBrowserView
-(MSSticker *)stickerBrowserView:(MSStickerBrowserView *)stickerBrowserView stickerAtIndex:(NSInteger)index
分别是返回图片的个数和MSSticker对象,MSSticker实例里面存放了图片地址。
MSStickerBrowserViewController
和UITableViewController很像但是有一点不同,数据源回调返回的是一个模型对象而不是一个view像cell这样的。其实是它帮我们做了一层封装最后使用的是MSStickerView
。所以我们也可以用UICollectionViewController
和MSStickerView
来创建
Interactive Messages
交互式消息都是在MSMessagesAppViewController
这个类中完成的。交互式消息的界面有两种
- Compact 不能访问键盘和相机,同时也不能使用横向滑动操作
- Expanded 不能访问用户输入框,但是可以访问键盘、相机,并且可以使用横向滑动操作
消息的发送是由这个类MSConversation
来完成,这里的发送是指把消息提交到输入框最好还需要用户点击发送
发送的方式有以下四种;
- (void)insertText:(NSString *)text completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
直接发送文本
- (void)insertSticker:(MSSticker *)sticker completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
发送上面提到的表情对象
- (void)insertMessage:(MSMessage *)message localizedChangeDescription:(nullable NSString *)changeDescription completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
发送交互性消息,该消息是一个MSMessage
对象,通过修改它的layout
属性来修改消息内容,同时包括消息的位置
imageTitle
,imageSubtitle
,caption
,subcaption
,trailingCaption
,trailingSubcaption
,mediaFileURL
,MSMessageTemplateLayout
对象提供这些属性来修改
`
- (void)insertAttachment:(NSURL *)URL withAlternateFilename:(nullable NSString *)filename completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
发送文件包括音视频