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]