关注即时通讯2

  一、好友列表

  管理好友列表是通过XMPP中的花名册(XMPPRoster)。代码示例:

复制代码
#pragma mark - 管理好友
        // 获取管理好友的单例对象
        XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance];
        // 给roster属性进行初始化
        self.xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:rosterStorage dispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)];
        // 将好友列表在通道中激活
        [self.xmppRoster activate:self.xmppStream];
        // 设置花名册代理
        [self.xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
复制代码

  XMPPRosterDelegate代理方法:

  

  添加好友:

  

  删除好友:

  

  部分代码示例:

复制代码
#pragma mark - XMPPRosterDelegate代理方法
// 开始获取好友
- (void)xmppRosterDidBeginPopulating:(XMPPRoster *)sender
{
    NSLog(@"开始获取好友");
}
// 结束获取好友
- (void)xmppRosterDidEndPopulating:(XMPPRoster *)sender
{
    NSLog(@"结束获取好友");
}
// 接收好友的信息
- (void)xmppRoster:(XMPPRoster *)sender didReceiveRosterItem:(DDXMLElement *)item
{
    // 好友状态的显示信息
    NSLog(@"好友信息 ==== %@", item);
}
// 监听方法
- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence
{
    NSLog(@"获取好友请求");
}
复制代码

  二、获取聊天信息

  1、聊天的规则:

  • 从服务器获取聊天记录,根据数据属性判断消息类型。
  • 发送消息。
  • 接收消息。
  • 代码示例:
复制代码
//初始化消息归档对象
XMPPMessageArchivingCoreDataStorage*messageStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
self.messageArchiving = [[XMPPMessageArchiving alloc] initWithMessageArchivingStorage:messageStorage dispatchQueue:dispatch_get_main_queue()];
//激活
[self.messageArchiving activate:self.xmppStream];
复制代码

  2、获取聊天记录:

  • 获取聊天记录使用CoreData的方式。
  • 创建请求。
  • 创建实体描述,实体名:XMPPMessageArchiving_Message_CoreDataObject。
  • 创建谓词查询条件,条件:streamBareJidStr == 本人Jid AND bareJidStr == 好友Jid。
  • 创建排序对象,排序条件:timestamp。
  • 执行请求。
  • 代码示例:
    XMPPMessage *message = [XMPPMessage messageWithType:@"chat" to:[XMPPJID jidWithString:self.chatToSB resource:kResource] ];
    [message addBody:@“hello!!!”];
   //使用 sendElement: 发送数据到服务器
    [[XMPPManager defaultManager].xmppStream sendElement:message];

  三、发送接收消息

  接收/发送消息的回调:

复制代码
// 发送消息成功
-(void)xmppStream:(XMPPStream *)sender didSendMessage:(XMPPMessage *)message
{
   
}
// 接收消息成功
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
    
}
// 发送消息失败
- (void)xmppStream:(XMPPStream *)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error
{
    
}
复制代码

  四、会话气泡实现

  

  五、语音图片原理

  传输原理:

  1、将图片/语音上传到服务器。

  2、根据和服务器的约定,拼好文件在服务器的地址(即图片或语音的URL)。

  3、调用xmpp发送信息方法,将地址发送出去。

  4、在接收端接收到的为一条文本信息,里面仅仅只是一个指向资源文件的url地址。

  5、在拿到url后进行需要的操作(即请求图片或者语音显示到页面上)。

  六、示例

  根据这两天学的完善了昨天的代码实现了简易的即时通讯系统。代码我上传到了github,下载地址。在这里给大家看下完成效果(因为是简易的,所以只是实现了功能,界面很low~~~大家可以在基础之上根据自己的喜好进行美化^_^):

posted @ 2016-05-19 21:02  维他命11  阅读(196)  评论(0编辑  收藏  举报