Android XMPP通信笔记

没有DNS解析器

No DNS resolver active.在初始化xmpp的时候或许会碰到这么个错误,谷歌了一下说是需要SmackAndroid.init(this);初始化一下SmackAndroid,当然别忘了不用的时候onDestroy();

public static SmackAndroid smackAndroid;
smackAndroid = SmackAndroid.init(context);
smackAndroid.onDestroy();

注:因为一般情况下xmpp使用会在整个app的生命周期内,所以这里的SmackAndroid.init(context)中context传值要注意,否则会出现 Are you missing a call to unregisterReceiver()? 情况出现。

关于JID

XMPP的地址叫做JabberID(简写为JID),它用来标示XMPP网络中的各个XMPP实体。JID由三部分组成:domain,node identifier和resource。JID中domain是必不可少的部分。注意:domain和node identifier部分是不分大小写的,但是resource区分大小写。
完整的Jid包括 node identifier@Domain/resource
一定要注意node identifier是不区分大小写的,如果有用友盟推送的话,用友盟的token注册xmpp,服务器不能将注册的username来指定为推送的友盟token,因为android友盟token是区分大小写的(iOS略过,iOS友盟token没有大小写),所以大家有需要(xmpp通讯,友盟推送)这种方案的,可以用token注册,但是推送一定要把token通过message方式发送给服务器。

message发送不同type类型

XMPP的节点是通讯过程中基本的“推”方式,它是一种“发出不管”的机制,来快速进行消息的获取。消息通常用在IM,群聊,提醒和通知,及其他应用。

Message节点有一个type属性,该属性有以下5个可能值,分别起到不同的作用:

normal
normal类型的消息就像邮件消息一样,因为这样的消息都是独立的,可能有反馈,也可能没有;

chat
chat类型的消息用于双方实时回话的数据交换,如朋友之间的即时消息聊天;

groupchat
groupchat类型的消息用于多用户聊天,即群聊,类似于IRC。

headline
headline类型的消息用于发送提醒和通知,对是否有反馈没有要求。

error
当双方前面发送的消息处理过程中有错误发生,该类型的节点就用反馈错误信息。

Message message = new Message();
        message.setTo(touser + "@" + Const.XMPP_YOU);//jid
        message.setFrom(SharePreferenceUtil.getXmppname() + "@"
                + Const.XMPP_YOU);
        message.setBody(content);//发送内容
        message.setType(Message.Type.chat);//发送类型
        mXMPPConnection.sendPacket(message);

监听不同type类型消息


        PacketFilter packetFilter = new PacketTypeFilter(Message.class);
        msgListener = new MsgListener(this, mNotificationManager);
        mXMPPConnection.addPacketListener(msgListener, packetFilter);

在processPacket里

@Override
    public void processPacket(Packet arg0) {
        // TODO Auto-generated method stub
        Message message = (Message) arg0;
            if (message.getType() == Message.Type.chat) {
            }else if (message.getType() == Message.Type.headline){
            }
        }

可以监听到不同type类型的message。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值