根据openfire源码的提供,其中SubscriptionPlugin这个插件已经实现了自动添加了好友的功能,但好我项目的的要求还是有些不一样,我根据源码中的内容自己编写了一个插件,关键代码如下:
public static void acceptSubscription(Packet packet ,PresenceRouter router) throws PacketRejectedException { String serverName = XMPPServer.getInstance().getServerInfo().getXMPPDomain(); if (getSubscriptionLevel().equals(LOCAL)) { String toDomain = packet.getTo().getDomain(); String fromDomain = packet.getFrom().getDomain(); if (!toDomain.equals(serverName) || !fromDomain.equals(serverName)) { return; } } Presence presence = new Presence(); presence.setType(Presence.Type.subscribed); presence.setTo(packet.getTo()); presence.setFrom(packet.getFrom()); router.route(presence); String toUserName = packet.getTo().getNode(); try { // 获取昵称 String nickName = UserManager.getInstance().getUser(toUserName).getName(); if (nickName == null || nickName.trim().length() == 0){ nickName = packet.getFrom().getNode(); } // 添加一个分组为fans的名 List<String> groups = new ArrayList<String>(); groups.add("fans"); RosterItem item = new RosterItem(packet.getFrom(), RosterItem.SUB_BOTH, RosterItem.ASK_NONE, RosterItem.RECV_NONE, nickName, groups); RosterManager.getRosterItemProvider().createItem(toUserName, item); // 将状态设置为 “相互为好友” Iterator<RosterItem> rosterItemIterator= RosterManager.getRosterItemProvider().getItems(packet.getFrom().getNode()); if (rosterItemIterator != null){ while (rosterItemIterator.hasNext()) { RosterItem rosterItem = (RosterItem) rosterItemIterator.next(); if (toUserName.equals(rosterItem.getJid().getNode())){ rosterItem.setSubStatus(RosterItem.SUB_BOTH); RosterManager.getRosterItemProvider().updateItem(toUserName, rosterItem); break; } } } Cache cache[] = CacheFactory.getAllCaches(); if (cache != null){ for (Cache cache2 : cache) { if("Roster".equals(cache2.getName())){ cache2.clear(); break; } } } } catch (Exception e) { e.printStackTrace(); } throw new PacketRejectedException(); }
而在其中,缓存的刷新尤其重要,不然,只有重启服务器,你才能看到两个好友之间才是真正的订阅关系的!
相关推荐
3. **联系人管理**:用户可以查看和管理自己的联系人列表,添加新的好友,同时可以查看好友的状态,了解他们是否在线。 4. **群聊功能**:支持创建和参与群组聊天,方便团队协作或社交交流。 5. **离线消息**:...
6. **添加好友**: 添加好友需要发送一个添加请求(`<presence type="subscribe">`),等待对方同意(`<presence type="subscribed">`)后,双方就可以互发消息了。 7. **修改密码**: 这个功能通常需要通过Openfire...
3. **好友系统**:模仿微信,我们需要实现添加好友、查看好友列表、接受/拒绝好友请求等功能。这涉及到处理XMPPRoster(好友列表)的相关XEPs,如XEP-0030(Service Discovery)和XEP-0163(Personal Eventing via ...
3.添加,删除好友 4.添加,移动好友分组 5.设置昵称 6.监控好友状态 7.网络断开系统自动重连接 8.收到添加好友请求消息处理 9.收到系统广播消息处理 10.查看历史聊天记录 11.消息弹出提醒,和小气泡 .... 因为时间...
5. **添加好友**:在其他设备上重复以上步骤,新用户可以添加为好友,从而进行聊天和文件传输。 **后续开发与定制** Spark作为一个开源项目,允许企业根据自身需求进行二次开发。这可能包括但不限于修改用户界面、...
- 客户可通过客户端添加工作组为好友并发起聊天。 - 客服人员收到聊天请求后,可选择接受或拒绝。 - 接受后,系统自动创建聊天室,双方进入客服聊天过程。 #### 四、XMPP协议解析 ##### 4.1 XMPP协议原理 XMPP...
- 好友系统:客户端需要维护一个好友列表,用户可以搜索、添加和删除好友。这涉及到在服务器上操作用户关系数据。 3. **二维码扫描功能** - 二维码生成与解析:集成开源的二维码库,如ZXing(Zebra Crossing),...
还可以实现添加、删除好友的接口。 5. **聊天功能**:创建聊天会话类,使用Message类发送和接收消息。XEP-0092定义了历史消息的查询方法,可以用于加载聊天记录。实现发送按钮点击事件,将输入框中的文字转换为...
添加好友时,需使用好友的用户名@你的域名格式。 此外,Openfire服务器的设置可以根据需要调整,例如关闭离线消息、文件传输等功能以减轻服务器负载,但群组功能通常被视为IM的基本功能,不建议关闭。对于更全面的...
isAutoSend为true时自动截图FriendActivity—- 好友详情页。必须参数usernameLoginActivity—- 登陆页。MainActivity—- 主页。使用fragments包住四个TAB页面MapActivity—- 地图页. 从聊天页的位置跳到此页面。必须...
通过发送和接收这些对象,应用可以实现添加好友、查看在线状态、发送和接收消息等功能。 总之,这个项目提供了一个完整的Android即时通讯应用的实现,涉及了Android开发、Java编程、XMPP协议、Openfire服务器和...
使用Android Studio的调试工具,如Logcat查看日志,模拟器或真机进行功能测试,JUnit或Espresso进行自动化测试,确保应用在各种设备和Android版本上的兼容性。 综上所述,开发Android IM应用涉及了服务器端Openfire...
本项目“ios-xmpp聊天界面.zip”提供了实现QQ登录、注册、添加好友、删除好友以及发送消息功能的基础框架。下面将详细介绍XMPP在iOS中的应用及其相关知识点。 1. **XMPP简介** - XMPP是基于XML的开放标准,用于在...
这可能涉及到用户注册和登录、好友添加、消息收发、群聊管理等多个环节。通过阅读Smack的官方文档,参考示例代码,以及参与社区讨论,可以加速学习过程,更好地理解和运用这个强大的API。 总的来说,Smack API是...
6. **事件监听**: 监听并响应用户的操作,例如添加好友、删除联系人、更改个人资料等。 7. **UI设计**: 创建直观且用户友好的界面,让用户能够轻松地进行聊天、查看联系人列表和管理账户设置。 8. **错误处理和重...
2. **好友列表与添加好友**:用户需要能够查看和管理好友列表,通过搜索或扫描二维码等方式添加新好友。 3. **实时消息传递**:使用XMPP框架的核心功能,实现实时文本、图片、文件等消息的发送与接收,同时支持消息...