iOS XMPP的使用

2019-04-02  本文已影响0人  简单的说

自从3G时代带火到现在,即时通讯已经走过很多个年头了,现在的IM基本上都是一家公司的APP的基本配置,大多数公司都会选择一些三方公司,毕竟三方公司有着成熟的IM体系,服务器都已经帮你搭建好了,甚至UI都可以直接集成,省时省力,但是有的公司会做自己的即时通讯,服务器自己搭建,传输协议,通讯员协议自己选择,我今天来说说我用xmpp的通讯协议来完成即时通讯的一些过程,和大家分享

一) 通讯协议(框架)

说到传输协议,现在市面上比较常见的传输协议主要有四种:

基于Scoket原生:代表框架 CocoaAsyncSocket。

基于WebScoket:代表框架 SocketRocket。

基于MQTT:代表框架 MQTTKit。

基于XMPP:代表框架 XMPPFramework。

有兴趣的朋友可以去了解一下,我使用的就是XMPPFramework这个通讯协议,下载地址如下XMPPFramework,下载导入到项目以后我们开始搭建即时通讯

二) 登陆/连接服务器

具体的xmpp的创建IM的方法已经有很多大神做了详细的教程,下面是我个人觉得比较好的两篇文章,供大家参考:

IM开发(2)-XMPP iOS开发 - 简书
苹果开发中文网站iOS 的 XMPPFramework 简介 - CocoaChina_让移动开发更简单

大部分的连接都是大同小异,我主要结合自己的开发经验来说说我自己遇到的,上面的两篇文章没有提及的.

1 首先就是enableBackgroundingOnSocket这个属性,是允许后台运行该程序,这在ios9.0之前还是有用的,但是在之后苹果严格了后台APP的使用,这个方法基本失效了,现在的即时通讯基本在APP退到后台被杀死以后,使用推送,相关的设置交给后台就可以,前端基本只需要提供推送证书就好了

2 是每一个用户的jid组成,xmpp的每一个用户都有一个对应的jid用来传递消息,jid的创建有两种方法

+ (XMPPJID*)jidWithString:(NSString*)jidStr

这种不需要设置resource

+ (XMPPJID*)jidWithString:(NSString*)jidStr resource:(NSString*)resource

这种需要设置resource

这两种的区别在于判断登陆账号的唯一性,整个xmpp的消息发送机制不是一对一的,是所有的用户都是连接到服务器上,然后服务器根据你的发送命令把消息转发给你要发送的人,说白了,就是消息转发机制,如果你不设置resource,那么服务器在你连接成功的时候,会自动的分配一个resource给你,这个是随机的,当你重复登陆的时候,如果后台没有做限制,你可能会遇到登陆了聊天服务器,对方也发送成功了信息,但是你就是收不到信息,究其原因就是你的resource没有设置,服务器可能把消息发给你上一次登陆的这个账号了

3 群聊的问题

xmpp的群聊是创建一个类似聊天室的东西,所以在创建群聊之前,你需要服务器上创建一个roomID,如果没有这个id,是创建不成功的,群聊的历史消息接收,你有三种情况选择,不接收历史消息,接收一段时间内的历史消息,接收全部历史消息

上一篇 下一篇

猜你喜欢

热点阅读