iMessage App(MSMessagesAppViewController)

iMessage App

iMessage app 是iOS 10中嵌入到Message內(nèi)容的iMessage apps,包含簡(jiǎn)單的表情包以及自定義的復(fù)雜界面。

iMessage App 簡(jiǎn)介

iMessage App是一種全新的應(yīng)用擴(kuò)展,載體是iOS系統(tǒng)的Message應(yīng)用,通過(guò)iMessage App,用戶可以發(fā)送更加豐富的消息內(nèi)容,享受更具交互性的會(huì)話體驗(yàn)。

iMessage App本身是一個(gè)Extension,但是它可以獨(dú)立開發(fā),不依賴任何Container App。我們也可以在現(xiàn)有的項(xiàng)目中添加iMessage App,系統(tǒng)會(huì)自動(dòng)將其添加到Messages App Store。

iMessage App只能在iOS(10+)系統(tǒng)運(yùn)行,iWatch和mac可以收到消息,但是不能解析。iWatch可以發(fā)送Stickers。

iMessage App 類別

Sticker pack app:?jiǎn)为?dú)的表情包應(yīng)用,不需要編寫任何代碼,只需拖動(dòng)圖片即可,包括靜態(tài)和動(dòng)態(tài)表情。

iMessage app:?jiǎn)为?dú)的iMessage應(yīng)用,要編寫代碼,可以發(fā)送表情包、文字、視頻、音頻。

Messages App Store

用來(lái)干什么的呢

顯示iMessage App;

為未安裝應(yīng)用的用戶提供安裝途徑(Inline App Attribution);

提供iap,Apple Pay和訪問(wèn)相機(jī)功能。

iMessage App只能在iOS(10+)系統(tǒng)運(yùn)行,iWatch和mac可以收到消息,但是不能解析。iWatch可以發(fā)送Stickers。

iMessage App本身是一個(gè)Extension,但是它可以獨(dú)立開發(fā),不依賴任何Container App。我們也可以在現(xiàn)有的項(xiàng)目中添加iMessage App,系統(tǒng)會(huì)自動(dòng)將其添加到Messages App Store。

創(chuàng)建iMessage App

在Xcode 8中,可以直接創(chuàng)建一個(gè)iMessages Application(File->New->Project->Application->iMessage Application)

在現(xiàn)有項(xiàng)目中添加iMessage App,可以通過(guò)添加Extension的方式添加(File->New->Target->Application Extension->iMessage Extension)

Messages API

MSMessagesAppViewController

MSMessagesAppViewController是iMessage APP的主界面,用來(lái)展消息擴(kuò)展的內(nèi)容。

MSConversation

MSConversation是指當(dāng)前的會(huì)話,包含發(fā)出、接收的消息。

MSMessage

MSMessage是消息體,包含了兩個(gè)部分: *MSSession用來(lái)描述消息如何發(fā)送 *MSMessageLayout用來(lái)描述消息如何展示

Presentation Style

MSMessagesAppViewController有兩種展現(xiàn)方式:typedef NS_ENUM(NSUInteger, MSMessagesAppPresentationStyle) { MSMessagesAppPresentationStyleCompact, MSMessagesAppPresentationStyleExpanded } NS_ENUM_AVAILABLE_IOS(10_0);在Compact模式下,不能訪問(wèn)鍵盤和相機(jī),同時(shí)也不能使用橫向滑動(dòng)操作(Compact模式下,橫向操作會(huì)由系統(tǒng)捕獲),但是可以訪問(wèn)用戶輸入框。

在Expanded模式下,我們不能訪問(wèn)用戶輸入框,但是可以訪問(wèn)鍵盤、相機(jī),并且可以使用橫向滑動(dòng)操作。

Extension Lifecycle

iMessage APP的生命周期會(huì)映射到MSMessagesAppViewController中,喚起或者銷毀都大致有三個(gè)過(guò)程。 * ####Becoming active 1.- (void)viewDidLoad;2.- (void)didBecomeActiveWithConversation:(MSConversation *)conversation;3.- (void)viewWillAppear:(BOOL)animated;* ####Resigning active 1.- (void)viewWillDisappear:(BOOL)animated;2.- (void)viewDidDisappear:(BOOL)animated;3.- (void)willResignActiveWithConversation:(MSConversation *)conversation;

在MSMessagesAppViewController被用戶關(guān)閉或通過(guò)其它方式dismiss之后,會(huì)執(zhí)行- (void)willResignActiveWithConversation:(MSConversation *)conversation;,之后系統(tǒng)隨時(shí)可以終止Message Extension(一般情況下會(huì)立刻終止)。

Compose a Message

創(chuàng)建一條Message

MSMessage *message = [[MSMessage alloc] initWithSession:session];

message.URL = [NSURL URLWithString:@"https://www.ccint.com"];

message.layout = layout;

message.accessibilityLabel = @"合合信息";

message.summaryText = @"INTSIG";

message.shouldExpire = NO;

調(diào)用MSMessage的初始化方法-(instancetype)initWithSession:(MSSession *)session;進(jìn)行初始化,其中的參數(shù)session可以傳一個(gè)新的MSSession對(duì)象或者是當(dāng)前conversation中用戶選中的message的session。 message中的layout屬性是一個(gè)MSMessageLayout對(duì)象,它負(fù)責(zé)對(duì)message進(jìn)行布局。

布局layout

MSMessageTemplateLayout *layout = [[MSMessageTemplateLayout alloc] init];

layout.image = image;

layout.imageTitle = imageTitle;

layout.imageSubtitle = imageSubtitle;

layout.caption = caption;

layout.trailingCaption = trailingCaption;

layout.subcaption = subcaption;

layout.trailingSubcaption = trailingSubcaption;

layout的布局如上圖所示,界面上顯示的屬性一共有7個(gè),分別為image,imageTitle,imageSubtitle,caption,trailingCaption,subcation和trailingSubcaption。將其中的caption,trailingCaption,subcation和trailingSubcaption置為nil時(shí),布局會(huì)變成上圖右邊的樣式。

發(fā)送Message

[self.activeConversation insertMessage:message completionHandler:^(NSError * _Nullable error) {

}];

[self.activeConversation insertText:test completionHandler:^(NSError * _Nullable error) {

}];

[self.activeConversation insertSticker:sticker completionHandler:^(NSError * _Nullable error) {

}];

[self.activeConversation insertAttachment:attachment withAlternateFilename:fileName completionHandler:^(NSError * _Nullable error) {

}];

通過(guò)MSMessagesAppViewController自身的屬性activeConversation的相關(guān)方法,可以進(jìn)行四種類型message的發(fā)送,具體方法為: *- (void)insertMessage:(MSMessage *)message completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;*- (void)insertText:(NSString *)text completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;*- (void)insertSticker:(MSSticker *)sticker completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;*- (void)insertAttachment:(NSURL *)URL withAlternateFilename:(nullable NSString *)filename completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;

[TOC]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容