iOS 环信本地添加欢迎语

最近公司的app添加了及时聊天的功能,我们用的是环信及时聊天的SDK,版本是v3.0的版本。产品提了一个需求,在进入聊天页面需要时,需要自送发送一条类似欢迎语的消息。

iOS 环信本地添加欢迎语

通过查看环信SDK的API接口,发现有一个添加本地消息的方法:

/*
 *  导入一组消息到DB
 *  @param aMessages        消息列表<EMMessage>
 *  @param aCompletionBlock 完成的回调
 */
- (void)importMessages:(NSArray *)aMessages
            completion:(void (^)(EMError *aError))aCompletionBlock;

于是迅速的撸代码,键盘啪啦啪啦,一段代码便出来了:

- (void)insertWelcomeMessage{
    
    NSString *msg = [NSString stringWithFormat:@"您好,我是当地向导%@,很高兴为您服务!",self.title];
    EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:msg];
    NSString *from = [[EMClient sharedClient] currentUsername];
    NSString *toUser = self.conversation.conversationId;
    
    EMMessage *message = [[EMMessage alloc] initWithConversationID:self.conversation.conversationId from:toUser to:from body:body ext:nil];
    message.chatType = EMChatTypeChat;
    message.status = EMMessageStatusSucceed;
    message.isRead = YES;
    
    [[EMClient sharedClient].chatManager importMessages:@[message] completion:nil];
    
}

运行一下,效果如下:

iOS 环信本地添加欢迎语

嗯,不错,效果相当棒。但是仔细分析一下,好像哪里不对劲。我跟别人聊天,应该是对方给我发送欢迎语,不是自己给自己发送欢迎语,这样便成了自嗨了。于是再找一找环信的api,发现有这么一个枚举类型:

/*!
 *  消息方向
 * /
typedef enum {
    EMMessageDirectionSend = 0,    /*! \~chinese 发送的消息 \~english Send */
    EMMessageDirectionReceive,     /*! \~chinese 接收的消息 \~english Receive */
} EMMessageDirection;

感觉好像有用,先加上去试一下,万一真的有用呢,哈哈。添加了消息方向之后的代码:

- (void)insertWelcomeMessage{
    
    NSString *msg = [NSString stringWithFormat:@"您好,我是当地向导%@,很高兴为您服务!",self.title];
    EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:msg];
    NSString *from = [[EMClient sharedClient] currentUsername];
    NSString *toUser = self.conversation.conversationId;
  
    EMMessage *message = [[EMMessage alloc] initWithConversationID:self.conversation.conversationId from:toUser to:from body:body ext:nil];
    message.chatType = EMChatTypeChat;
    message.status = EMMessageStatusSucceed;
    message.direction = EMMessageDirectionReceive; //关键代码,特别提醒
    message.isRead = YES;
    
    [[EMClient sharedClient].chatManager importMessages:@[message] completion:nil];
    
}

运行一下,看下效果咋样。

iOS 环信本地添加欢迎语

卧槽,真的有用。另外,需要处理一下,这样每次进入聊天页面都会自动发送一条欢迎语消息,发多了有点烦,其实发送一次就够了。与某个人聊天了,发送了欢迎语消息之后,就把这个人的环信ID保存在本地,下次进来的时候,先判断一下,如果发送过了,就不再发送了。