Android smack4.2的简单使用

1.使用背景

在搭建即时通讯的时候,一般采用Openfire+smack实现(如:第三方环信 )。由于Asmack已经废弃。所以先使用官方最新库 : GitHub上的指导


2.使用大致流程

2.1新建一个工程,导入以下依赖

repositories {

      maven {

         url 'https://oss.sonatype.org/content/repositories/snapshots'

       }

      mavenCentral()

}

dependencies {

compile "org.igniterealtime.smack:smack-android-extensions:4.2.0"

compile "org.igniterealtime.smack:smack-tcp:4.2.0"

compile "org.igniterealtime.smack:smack-android:4.2.0"

}

2.2连接Openfire服务器

InetAddress address = InetAddress.getByName(Const.ip);

//配置信息

XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()

.setXmppDomain("192.168.100.116")//设置xmpp域名

.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)//安全模式认证

.setHostAddress(address)

.setPort(Const.port)

.build();

xmpptcpConnection = new XMPPTCPConnection(config);//连接类

xmpptcpConnection.connect();

2.3 .用户登录

//设置是否在线状态,和状态说明

Presence presence = new Presence(Presence.Type.unavailable);

presence.setStatus("Gone fishing");

xmpptcpConnection.sendStanza(presence);

xmpptcpConnection.login(userName, password);//关键代码

2.4用户好友获取

    两种方式:(1)

Roster instanceFor = Roster.getInstanceFor(xmpptcpConnection);

Set entries = instanceFor.getEntries();

for (RosterEntry entry:entries) {

entry.getType();

entry.getName();//昵称

entry.getGroups();//好友所在的组

entry.getJid().getDomain();//好友域名

entry.getJid().getLocalpartOrNull();//好友名称

entry.getUser();//(废弃)好友完整名称(包括域名)

}

 (2)

Roster instanceFor = Roster.getInstanceFor(xmpptcpConnection);

Collection groups = instanceFor.getGroups();

group.getName();//获取用户组名

     for (RosterGroup group:groups) {

      List entries = group.getEntries();

              for (RosterEntry entry : entries) {

               }

        }

2.5接收消息和发送消息

(1) 接收消息:获取聊天管理器,注册获取消息监听

ChatManager chatManager = ChatManager.getInstanceFor(xmpptcpConnection);

chatManager.addIncomingListener(new IncomingChatMessageListener() {

@Override

public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {

if (message.getBody() != null) {

Log.e("消息接收——", message.getBody().toString() + "");

}

}

});

(2)发送消息:获取聊天管理器,指定消息接收人,发送消息

ChatManager chatManager = ChatManager.getInstanceFor(xmpptcpConnection);

//JidCreate.entityBareFrom("用户名@域名");获取用户ID

EntityBareJid jid = JidCreate.entityBareFrom("xxx@192.168.100.116");

Chat chat = chatManager.chatWith(jid);

chat.send("woaini1");

//Add a new listener for outgoing chat messages.

chatManager.addOutgoingListener(new OutgoingChatMessageListener() {

@Override

      public void newOutgoingMessage(EntityBareJid to, Message message, Chat chat) {

                 Log.e("发哦送消息", "" + message.getBody().toString());

      }

});

至于其他的相关操作可能留待以后吧。。。。第一次在简书上写文章,如若有不当之处,请指教

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • 关于XMPP最权威的讲解:http://www.jabbercn.org/RFC3920(这个才是最权威的,下面文...
    随风飘荡的小逗逼阅读 1,546评论 1 5
  • 即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习...
    JackChen1024阅读 1,998评论 2 9
  • 一、Smack库概述     Smack是一个开源、易用的XMPP/Jabber客户端库,它使用Java语言开发,...
    AndryYu阅读 6,315评论 2 13
  • 亲爱的朋友您好: 我有一屋,准备卖出了,我屋期待有缘买家,我也期待有缘的朋友。 她位于西夏区西花园北...
    晚起画蛾眉阅读 811评论 0 4