IMessage Extension 之 Application

作者: 游城十代2dai | 来源:发表于2017-03-09 15:55 被阅读67次

    IMessage For Application

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

    创建工程的选项

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

    file -> new -> target

    创建 target 和直接创建工程长得不一样哈!

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

    点击"Activate"

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

    注意 BundleIdentifier 的写法

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

    接下来说一下图标的问题

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

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

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

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

    Build Phases Build Phases
    // Cocoapods 的也可以这么引入
    
    target '原工程 App 的名字' do
            pod ...
            pod ...
            pod ...
    end
    
    target 'IMessage App 的名字' do
            pod ...
    end
    

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

    Project

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

    AppGroups 在第一位 AppGroups 创建好在这里查看

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

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

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

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

    相关文章

      网友评论

        本文标题:IMessage Extension 之 Application

        本文链接:https://www.haomeiwen.com/subject/tuvwgttx.html