网站欣赏与创建网页,深圳企业500强名单,网站推广中应注意哪些事项,做网站会用到什么语言IMessage扩展简介
iOS10新加入的基于iMessage的应用扩展#xff0c;可以丰富发送消息的内容。#xff08;分享表情、图片、文字、视频、动态消息#xff1b;一起完成任务或游戏。#xff09;
简单的将发送的数据内型分为三种#xff1a; 1.贴纸Stickers#xff1b; 2.交…IMessage扩展简介
iOS10新加入的基于iMessage的应用扩展可以丰富发送消息的内容。分享表情、图片、文字、视频、动态消息一起完成任务或游戏。
简单的将发送的数据内型分为三种 1.贴纸Stickers 2.交互消息Interactive Messages (本文介绍此种) 3.图片音视频文本链接等 两种显示模式Compact和Expanded。
Compact收缩模式不能访问键盘和相机不能使用横向滑动横向滑动操作会由系统捕获但可以访问输入框。 Expanded展开模式不能访问用户输入框但是可以访问键盘、相机并且可以使用横向滑动操作。
新建IMessage扩展
xcode新建
打开xcode :File-New-Target 然后在右侧输入框输入IMessage-点击IMessage Extension
podfile
podfile里面加入IMessage需要依赖的库下面是一个例子这里我提取了跟主应用公共依赖的库到函数commonPod需要注意的是有用了UIAPPlication的库在IMessage里面可能导致崩溃因为很多直接获取这个函数的都会返回空因为是扩展
platform :ios, 14.0
def commonPodpod YYKitpod SnapKitpod SwiftyJSON
endtarget TestIM do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!commonPodpod LookinServer, :configurations [Debug]pod IQKeyboardManagerSwiftendtarget MyIM douse_frameworks!commonPodend应用图标
新建项目默认在asset中有这个文件如下图但是右侧图标都是空的需要按照下面图标标的样式手动将对应文件拖到右边的那个位置。
目录结构
新建的IMessage扩展只有如下文件主要UI代码是在MessagesViewController上进行显示。
使用IMessage api MessagesViewController
本类为新建IMessage xcode自动为我们创建的类他继承MSMessagesAppViewController然后这个又继承自UIViewController为主要控制IMessage展示的控制器。 它是如下图所示框中的部分是收缩状态的vc需要注意的是 他有一部分是在屏幕之外的向上手动拖拽扩展的时候下面那块才会露出来。
这个是展开状态的vc:
主要生命周期 //扩展激活打开前open func willBecomeActive(with conversation: MSConversation)//扩展已被激活打开open func didBecomeActive(with conversation: MSConversation)//扩展被关闭前open func willResignActive(with conversation: MSConversation)//扩展被关闭open func didResignActive(with conversation: MSConversation)//vc将要收起或者展开 初始化的时候不会调用只在状态切换时调用。在松手的时候会调用available(iOS 10.0, *)open func willTransition(to presentationStyle: MSMessagesAppPresentationStyle)//vc完成收起或者展开 初始化的时候不会调用只在状态切换时调用。available(iOS 10.0, *)open func didTransition(to presentationStyle: MSMessagesAppPresentationStyle)需要注意的是只要这个ViewController变成不可见这个扩展就会关闭例如切换IMessage的其他扩展、切后台等。
MessagesViewController有展开收起状态对应的他的属性presentationStyle会是expanded或者compact open var presentationStyle: MSMessagesAppPresentationStyle { get }
手动调整扩展展开或收缩的状态切换
if isExpand {requestPresentationStyle(.expanded)}else{requestPresentationStyle(.compact)}MSConversation
在MessagesViewController中有个属性叫activeConversation它是MSConversation 用来操作发送例如IMessage的输入框里面插入文本或组件或者直接在IMessage中发送文本或者组件。这个东西在模拟器上用回崩溃。 向IMessage的输入框插入文本并换行
activeConversation?.insertText(这是一串文本)向IMessage的输入框插入组件这里使用了MSMessageTemplateLayout配置样式并通过发送MSMessage实现
let layout MSMessageTemplateLayout()
layout.image UIImage(named: iMessage App Icon)
layout.caption Ask Al Anything
let myMessage MSMessage()
myMessage.layout layout
activeConversation?.insert(myMessage)这个组件可以发送到对方手机的IMessage如果对方装了我们的应用会在IMessage直接打开扩展并切换到展开状态否则IMessage的appstore扩展会打开并展示我们的应用详情页面。
坑点要点
见这篇文章 iMessage 开发要点 坑点记录