iOS10中Messages独立应用与扩展插件详析(二)

简介: iOS10中Messages独立应用与扩展插件详析

3.解析MSMessagesAppViewController类


       由于MSMessagesAppViewController类是继承于UIViewController类的,因此UIViewController中的视图控制器切换方法这里都可以直接使用,MSMessagesAppViewController中供开发者进行调用的属性和方法如下:


//当前激活的会话实例 后面会介绍

@property (nonatomic, strong, readonly, nullable) MSConversation *activeConversation;

//当前界面所在的状态

/*

typedef NS_ENUM(NSUInteger, MSMessagesAppPresentationStyle) {

   //紧凑状态

   MSMessagesAppPresentationStyleCompact,

   //扩宽状态

   MSMessagesAppPresentationStyleExpanded

} NS_ENUM_AVAILABLE_IOS(10_0);

*/

@property (nonatomic, assign, readonly) MSMessagesAppPresentationStyle presentationStyle;

//切换界面状态

-(void)requestPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle;

//调用此方法后,MessagesApp被收回 弹出键盘

-(void)dismiss;

MSMessagesAppViewController中新增加的声明周期方法如下:


//当Messages App将要激活时调用

-(void)willBecomeActiveWithConversation:(MSConversation *)conversation;

//当Messages App已经被激活后调用

-(void)didBecomeActiveWithConversation:(MSConversation *)conversation;

//当Messages App将要被注销时调用

-(void)willResignActiveWithConversation:(MSConversation *)conversation;

//当MessageApp已经被注销时调用

-(void)didResignActiveWithConversation:(MSConversation *)conversation;

//消息实体在会话中将要被选中时调用

-(void)willSelectMessage:(MSMessage *)message conversation:(MSConversation *)conversation;

//消息实体在会话中已经被选中时调用

-(void)didSelectMessage:(MSMessage *)message conversation:(MSConversation *)conversation;

//接收到同一Messages App发送的消息实体时调用

-(void)didReceiveMessage:(MSMessage *)message conversation:(MSConversation *)conversation;

//开发发送消息时调用

-(void)didStartSendingMessage:(MSMessage *)message conversation:(MSConversation *)conversation;

//取消发送时调用

-(void)didCancelSendingMessage:(MSMessage *)message conversation:(MSConversation *)conversation;

//控制器界面模式将要改变时调用

-(void)willTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle;

//控制器界面已经改变时调用

-(void)didTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle;

4.使用MSConversation会话类来进行消息的发送


       MSConversation类用来描述会话,MSMessagesAppViewController中内置MSConversation对象,开发者可以用它来进行消息传递,示例代码如下:


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

   switch (indexPath.row) {

       case 0:

       {

           [self.activeConversation insertText:@"新的信息" completionHandler:^(NSError * error) {

             

           }];

       }

           break;

       case 1:

       {

           [self.activeConversation insertSticker:[[MSSticker alloc] initWithContentsOfFileURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"productImage" ofType:@"png"]] localizedDescription:@"image" error:nil] completionHandler:nil];

       }

           break;

       case 2:

       {

           [self.activeConversation insertAttachment:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"file" ofType:nil]] withAlternateFilename:@"文件" completionHandler:nil];

       }

           break;

       case 3:

       {

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

           message.URL = [NSURL URLWithString:@"http://www.baidu.com"];

           message.accessibilityLabel = @"message";

           message.summaryText = @"message";

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

           layout.caption = @"caption";

           layout.subcaption = @"subcaption";

           layout.trailingCaption = @"trailing";

           layout.trailingSubcaption =@"subtrailing";

           layout.image = [UIImage imageNamed:@"productImage"];

           layout.mediaFileURL =[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"productImage" ofType:@"png"]];

           layout.imageTitle = @"杜康";

           layout.imageSubtitle = @"酒水";

         

           message.layout = layout;

         

           [self.activeConversation insertMessage:message completionHandler:nil];

       }

           break;

       case 4:

       {

           [self presentViewController:[StackerViewController new] animated:YES completion:nil

            ];

       }

           break;

       case 5:

       {

           [self presentViewController:[StackController new] animated:YES completion:nil

            ];

       }

           break;

       default:

           break;

   }

}

MSConversation支持发送的消息分为4中,分别为文本消息,表情贴图消息,文件消息和Message实体消息,上面代码都做了演示。MSConversation中重要属性和方法解析如下:


//本地的设备UUID

@property (nonatomic, readonly) NSUUID *localParticipantIdentifier;

//会话中远程设备的UUID 支持多人会话

@property (nonatomic, readonly) NSArray<NSUUID *> *remoteParticipantIdentifiers;

//当前选中的消息实体

@property (nonatomic, readonly, nullable) MSMessage *selectedMessage;

//插入文本消息

- (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;

//插入Message实体消息

- (void)insertMessage:(MSMessage *)message completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;

效果图如下:

image.png

            image.png

image.png


5.消息实体MSMessage的应用


       MSMessage是Messages App定义的一种消息实体,其可以用来在Messages App间传递信息,因为它的存在,通过Messages用用实现休闲对战游戏变得十分容易,开发者不需要在写即时通信链接,只需设计游戏逻辑即可。MSMessage不能够完全自定义UI,但是Messages框架中的MSMessageTemplateLayout类可以对其UI进行简单的配置。


       MSMessage类中常用的属性和方法如下:


//初始化方法 可以绑定一个session,同一个session种的消息实体会被归为一类

-(instancetype)initWithSession:(MSSession *)session NS_DESIGNATED_INITIALIZER;

//发送此消息的设备

@property (nonatomic, readonly) NSUUID *senderParticipantIdentifier;

//消息的UI布局信息

@property (nonatomic, copy, nullable) MSMessageLayout* layout;

//消息附带的URL 开发者可以通过这个URL来传值

@property (nonatomic, copy, nullable) NSURL *URL;

//是否保留过期的消息

@property (nonatomic, assign) BOOL shouldExpire;


//盲人模式中对应的文案

@property (nonatomic, copy, nullable) NSString *accessibilityLabel;

6.消息实体布局类MSMessageLayout


       前面介绍,MSMessage类中并没有定义UI,UI部分需要配合MSMessageLayout类来配置。需要注意,MSMessageLayout类是一个抽象类,apple设计的目的可能是为了以后便于扩展多个消息布局模板。目前,开发者只需要使用MSMessageTemplateLayout类来对消息实体进行布局。


       MSMessageTemplateLayout类中可以配置的属性如下:


//设置消息实体的标题

@property (nonatomic, copy, nullable) NSString *caption;

//设置消息实体的子标题

@property (nonatomic, copy, nullable) NSString *subcaption;

//设置消息实体的右侧标题

@property (nonatomic, copy, nullable) NSString *trailingCaption;

//设置消息实体的右侧子标题

@property (nonatomic, copy, nullable) NSString *trailingSubcaption;

//设置消息实体的图片

@property (nonatomic, strong, nullable) UIImage *image;

//设置消息实体的媒体地址 需要注意 如果设置的image属性 这个属性将被忽略

@property (nonatomic, copy, nullable) NSURL *mediaFileURL;

//设置消息实体的图标标题

@property (nonatomic, copy, nullable) NSString *imageTitle;

//设置消息实体的图片子标题

@property (nonatomic, copy, nullable) NSString *imageSubtitle;

目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1240 4
|
6月前
|
iOS开发
ios虚拟摄像头插件,iPhone苹果替换相机软件,通过xposed框架实现
本项目包含三部分内容:1) 通过MobileSubstrate Hook系统相机进程,替换原始视频流数据的核心代码;2) 基于SwiftUI设计的多功能摄像头界面,支持摄像头切换、滤镜选择和视频源配置;3) 使用PHPickerViewController实现本地视频选择、时长滑块控制及视频裁剪导出功能。适用于学习iOS底层Hook技术与现代UI开发结合的应用场景。下载地址:https://www.pan38.com/share.php?code=BCjmZ,提取码:8888(仅供学习参考)。
|
6月前
|
安全 数据安全/隐私保护 iOS开发
ios一键新机硬改软件,苹果改机型用什么插件,串号Imei过检测工具
本文介绍了苹果设备的安全机制、开发接口及企业解决方案。核心安全包括硬件级防护(Secure Enclave、IMEI锁、T2芯片)和软件防护(启动链验证、KTRR、沙盒控制)。
|
9月前
|
iOS开发 开发者 Windows
uniapp云打包ios应用证书的获取方法,生成指南
打包用到的一共两个文件,一个是p12格式的私钥证书,一个是证书profile文件。其中生成p12证书的时候,按照官网的教程,是需要MAC电脑来协助做的,主要是生成一些csr文件和导出p12证书等。其实这些步骤也可以借助一些其他的工具来实现,不一定使用mac电脑,用windows电脑也可以创建。
1176 0
|
JavaScript 前端开发 iOS开发
ios样式开关按钮jQuery插件
ios样式开关按钮jQuery插件
162 7
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
327 2
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
开发者 iOS开发
iOS10中Messages独立应用与扩展插件详析(一)
iOS10中Messages独立应用与扩展插件详析
368 0
iOS10中Messages独立应用与扩展插件详析(一)
|
开发者 容器
iOS10中Messages独立应用与扩展插件详析(三)
iOS10中Messages独立应用与扩展插件详析
276 0
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。

热门文章

最新文章