IMessage Extension 之 Application

IMessage For Application

记录这次的主要是关于 Application 这一个模块的

IMessage Extension 之 Application_第1张图片
创建工程的选项

但是不是要单独使用而是和我的项目一起使用所以要在项目中添加一个 target :

file -> new -> target

IMessage Extension 之 Application_第2张图片
创建 target 和直接创建工程长得不一样哈!

写好工程名字之后会有一个 alert 点击Activate:

IMessage Extension 之 Application_第3张图片
点击"Activate"

有一个需要注意的地方就是Bundle Identifier, 前面部分必须和你的主工程的一样后边的你就随意吧

IMessage Extension 之 Application_第4张图片
注意 BundleIdentifier 的写法

之后写东西的话就和正常的开发一样了, 在MessagesViewController默认的这个控制器中编写, 或者自己创建一个都可以的, 但是要注意需要继承MSMessagesAppViewController这个类

接下来说一下图标的问题

  • 图标最好准备一个1024*768的图片, 这样好裁剪

  • 其次呢, 我推荐一个软件, IconKit, 这个软件包含了所有的图标剪裁:

    IMessage Extension 之 Application_第5张图片
    IconKit 的裁剪

  • 然后呢, 会生成所有图标的.stickersiconset这个后缀的文件夹, 其中都是符合要求的图标只需要全部选中拖入工程, 我建议是拖入, 我试过直接替换文件夹结果出问题了, 我自那以后就是拖入省的出现问题

对于这个工程, Extension 是可以使用你原工程的类, 但是需要在Build Phases 中引入你需要的.m文件(目前我就在用这个方式, 因为需要的不多, 所以没有去找更简单的方式, 如果有人知道更简单的方式请留言告诉我哟谢谢)

IMessage Extension 之 Application_第6张图片
Build Phases
IMessage Extension 之 Application_第7张图片
Build Phases
// Cocoapods 的也可以这么引入

target '原工程 App 的名字' do
        pod ...
        pod ...
        pod ...
end

target 'IMessage App 的名字' do
        pod ...
end

还需要配置一下 Project 的东西, 如图:

IMessage Extension 之 Application_第8张图片
Project

基本的配置其实并没有完毕, 因为我们在写项目的时候很有可能需要原工程(宿主)的数据, 宿主也可能需要 IMessage 的数据, 所以我们需要进行数据共享, 这样就需要你的项目的证书支持了, 首先去Development, 创建appID, 描述文件什么的, 其中需要注意的就是 appID, 原工程和 IMessage 都需要一份证书的, 都需要勾选AppGroups

IMessage Extension 之 Application_第9张图片
AppGroups 在第一位
IMessage Extension 之 Application_第10张图片
AppGroups 创建好在这里查看

刚开始选中的时候会让你创建一个 groups, 你去创建就好, 回头要重新进入勾选一下

注意:这个 groups 的名字必须是group.xxx 这个格式的, 例如: group.CloudSecretary

然后就去创建你的工程描述文件吧, 下载好打开, 进 行下一步配置, 回到工程:

IMessage Extension 之 Application_第11张图片
AppGroups 创建好在这里查看

这样我们的配置就到此告一段落了, 共享数据通讯有几个特有的方法:

--- 使用 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;

具体的消息体表现请看我盗的图:
IMessage Extension 之 Application_第12张图片
AppGroups 创建好在这里查看
MessagesViewController 的生命周期很简单根据自己的需求去使用就好了, 有关于点击事件, 获取到的消息体只能携带一个 URL, 所以我们只能通过 URL 来传递消息了, 如果有时候你获取到的 URL 为 NULL 请不要着急, 多试试点击, 多多编译工程, 我就因为这个获取不到而耽误了3个多小时, 仅仅是因为 Xcode 抽风

你可能感兴趣的:(IMessage Extension 之 Application)