openfire+smack添加好友申请 Smack 4.1.8 and 4.2.0-beta2 添加好友请求以及确认

来源:互联网 发布:2017优化设计政治答案 编辑:程序博客网 时间:2024/06/10 15:23

openfire Smack 4.1.8 and 4.2.0-beta2 添加好友请求确认

首先说一下我踩的坑,以前的方法过期,会有用户名过长无法接收,无法过滤,丢失请求,发送无效等等问题,博客一大堆不更新,都是老版本的坑,这里直接上传以前的过期示意图

请大家不要再写以下的代码

老版本addPacketListener
这里写图片描述
老版本listener如下:
这里写图片描述
现在我的包是
Smack 4.1.8 and 4.2.0-beta2其实是一样的,我这里用的不是后者测试版,选的前者4.1.8

compile 'org.igniterealtime.smack:smack-android-extensions:4.1.8'compile 'org.igniterealtime.smack:smack-tcp:4.1.8'

先直接上传最新写法:
新版本add监听

//条件过滤器AndFilter filter = new AndFilter(new StanzaTypeFilter(Presence.class));//添加监听mConnection.addAsyncStanzaListener(packetListener, filter);

新版本listener

 static StanzaListener packetListener = new StanzaListener() {        @Override        public void processPacket(Stanza packet) throws SmackException.NotConnectedException {            if (packet instanceof Presence) {                Presence presence = (Presence) packet;                String fromId = presence.getFrom();                String from = presence.getFrom().split("@")[0];//我这里只为了打印去掉了后缀                if (presence.getType().equals(Presence.Type.subscribe)) {                    YbLogUtil.d("yangbinnew请求添加好友" + from);                } else if (presence.getType().equals(Presence.Type.subscribed)) {//对方同意订阅                    YbLogUtil.d("yangbinnew同意订阅" + from);                } else if (presence.getType().equals(Presence.Type.unsubscribe)) {//取消订阅                    YbLogUtil.d("yangbinnew取消订阅" + from);                } else if (presence.getType().equals(Presence.Type.unsubscribed)) {//拒绝订阅                    YbLogUtil.d("yangbinnew拒绝订阅" + from);                } else if (presence.getType().equals(Presence.Type.unavailable)) {//离线                    YbLogUtil.d("yangbinnew离线" + from);                } else if (presence.getType().equals(Presence.Type.available)) {//上线                    YbLogUtil.d("yangbinnew上线" + from);                }            }        }    };

演示请求效果
这里写图片描述
处理好友请求

同意(或者拒绝)

  Presence pres = new Presence(Presence.Type.subscribed);//拒绝unsubscribed  pres.setTo(fromId);  try {      XMPPConnectionService.getmConnection().sendStanza(pres);  } catch (SmackException.NotConnectedException e) {      e.printStackTrace();  }

添加好友

 //添加好友Roster roster = Roster.getInstanceFor(getmConnection());roster.createEntry(friendName.trim() + "@" + Constant.XMPP_HOST, name, new String[]{"Friends"});

删除好友

Roster roster = Roster.getInstanceFor(getmConnection());RosterEntry entry = roster.getEntry(user);roster.removeEntry(entry);

根据自己需求

有同步和异步,上一个则一次性无序全部给你,下一个则一个个给你
这里写图片描述

这里还有一个好友动态监听,比上面简单些,但只有Added的好友,若没有好友权限添加,则可以用这个,若需要手动确认添加好友,则按上面所示

RosterListener listener =new RosterListener() {        @Override        public void entriesAdded(Collection<String> addresses) {        }        @Override        public void entriesUpdated(Collection<String> addresses) {        }        @Override        public void entriesDeleted(Collection<String> addresses) {        }        @Override        public void presenceChanged(Presence presence) {        }    };

**qq:1250211588,有任何问题,可以咨询我,谢谢

0 0