iMessage App
iMessage app 是iOS 10中嵌入到Message內(nèi)容的iMessage apps,包含簡單的表情包以及自定義的復(fù)雜界面。
iMessage App 簡介
iMessage App是一種全新的應(yīng)用擴(kuò)展,載體是iOS系統(tǒng)的Message應(yīng)用闯冷,通過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:單獨(dú)的表情包應(yīng)用,不需要編寫任何代碼蜕衡,只需拖動(dòng)圖片即可壤短,包括靜態(tài)和動(dòng)態(tài)表情。
iMessage app:單獨(dú)的iMessage應(yīng)用慨仿,要編寫代碼久脯,可以發(fā)送表情包、文字镰吆、視頻帘撰、音頻。
Messages App Store
用來干什么的呢
顯示iMessage App;
為未安裝應(yīng)用的用戶提供安裝途徑(Inline App Attribution);
提供iap万皿,Apple Pay和訪問相機(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,可以通過添加Extension的方式添加(File->New->Target->Application Extension->iMessage Extension)
Messages API
MSMessagesAppViewController
MSMessagesAppViewController是iMessage APP的主界面妙黍,用來展消息擴(kuò)展的內(nèi)容悴侵。
MSConversation
MSConversation是指當(dāng)前的會(huì)話,包含發(fā)出拭嫁、接收的消息可免。
MSMessage
MSMessage是消息體,包含了兩個(gè)部分: *MSSession用來描述消息如何發(fā)送 *MSMessageLayout用來描述消息如何展示
Presentation Style
MSMessagesAppViewController有兩種展現(xiàn)方式:typedef NS_ENUM(NSUInteger, MSMessagesAppPresentationStyle) { MSMessagesAppPresentationStyleCompact, MSMessagesAppPresentationStyleExpanded } NS_ENUM_AVAILABLE_IOS(10_0);在Compact模式下做粤,不能訪問鍵盤和相機(jī)浇借,同時(shí)也不能使用橫向滑動(dòng)操作(Compact模式下,橫向操作會(huì)由系統(tǒng)捕獲)怕品,但是可以訪問用戶輸入框妇垢。
在Expanded模式下,我們不能訪問用戶輸入框肉康,但是可以訪問鍵盤闯估、相機(jī),并且可以使用橫向滑動(dòng)操作吼和。
Extension Lifecycle
iMessage APP的生命周期會(huì)映射到MSMessagesAppViewController中睬愤,喚起或者銷毀都大致有三個(gè)過程。 * ####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)閉或通過其它方式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) {
}];
通過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]