IMessage For Application
记录这次的简书主要是关于 Application 这一个模块的
但是不是要单独使用而是和我的项目一起使用所以要在项目中添加一个
target
:
file -> new -> target
写好工程名字之后会有一个 alert 点击
Activate
:
有一个需要注意的地方就是
Bundle Identifier
, 前面部分必须和你的主工程的一样后边的你就随意吧
之后写东西的话就和正常的开发一样了, 在
MessagesViewController
默认的这个控制器中编写, 或者自己创建一个都可以的, 但是要注意需要继承MSMessagesAppViewController
这个类
接下来说一下图标的问题
图标最好准备一个
1024*768
的图片, 这样好裁剪-
其次呢, 我推荐一个软件,
IconKit
, 这个软件包含了所有的图标剪裁:
然后呢, 会生成所有图标的
.stickersiconset
这个后缀的文件夹, 其中都是符合要求的图标只需要全部选中拖入工程, 我建议是拖入, 我试过直接替换文件夹结果出问题了, 我自那以后就是拖入省的出现问题
对于这个工程, Extension 是可以使用你原工程的类, 但是需要在
Build Phases
中引入你需要的.m
文件(目前我就在用这个方式, 因为需要的不多, 所以没有去找更简单的方式, 如果有人知道更简单的方式请留言告诉我哟谢谢)
// Cocoapods 的也可以这么引入
target '原工程 App 的名字' do
pod ...
pod ...
pod ...
end
target 'IMessage App 的名字' do
pod ...
end
还需要配置一下 Project 的东西, 如图:
基本的配置其实并没有完毕, 因为我们在写项目的时候很有可能需要原工程(宿主)的数据, 宿主也可能需要 IMessage 的数据, 所以我们需要进行数据共享, 这样就需要你的项目的证书支持了, 首先去Development, 创建appID, 描述文件什么的, 其中需要注意的就是 appID, 原工程和 IMessage 都需要一份证书的, 都需要勾选
AppGroups
刚开始选中的时候会让你创建一个 groups, 你去创建就好, 回头要重新进入勾选一下
注意:这个 groups 的名字必须是
group.xxx
这个格式的, 例如: group.CloudSecretary
然后就去创建你的工程描述文件吧, 下载好打开, 进 行下一步配置, 回到工程:
这样我们的配置就到此告一段落了, 共享数据通讯有几个特有的方法:
--- 使用 NSUserDefaults
在宿主App里保存值
NSUserDefaults *userDefault = [[NSUserDefaults alloc]initWithSuiteName:@"group.xxxxx"];
[userDefault setObject:userToken forKey:@"IMessage_User_Token"];
在拓展App里取值
NSUserDefaults *userDefault = [[NSUserDefaults alloc]initWithSuiteName:@"group.xxxxx"];
NSString *userToken = [userDefault objectForKey:@"IMessage_User_Token"];
--- 使用 数据库(数据较多的时候建议使用)
// 假设存放的是下面的位置
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"IMessage.sqlite"]
// 需要用 NSFileManager 来获取路径
[[[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.testAppExtension"] absoluteString] stringByAppendingPathComponent:@"IMessage.sqlite"]
到目前为止, 我们的准备工作就都做完了, 剩下的编程就很简单了, API 也没有多少, 最主要的我说几个吧:
MSConversation :这个类包含了我们的消息体MSMessage,以及发送message的方法。
//发送一个 MSMessage 消息体
- (void)insertMessage:(MSMessage *)message completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
//发送Sticker(贴纸,表情)
- (void)insertSticker:(MSSticker *)sticker completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
//发送纯文本消息
- (void)insertText:(NSString *)text completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
//发送文件
- (void)insertAttachment:(NSURL *)URL withAlternateFilename:(nullable NSString *)filename completionHandler:(nullable void (^)(NSError * _Nullable))completionHandler;
MSMessage:消息体,包含了我们消息的内容的排版MSMessageLayout。
MSMessageLayout:对于消息体的排版,系统已经为我们抽象出了一个这个类,只暴露了.h文件。
MSMessageTemplateLayout:继承与MSMessageLayout,包含了消息的内容,有一下这些属性:
image;
imageTitle;
imageSubtitle;
caption;
subcaption;
trailingCaption;
trailingSubcaption;
具体的消息体表现请看我盗的图: