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

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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小火柴卖的小孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值