aSmack4.0之旅(一)配置注册篇
一、Smack是什么
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。
Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。
优点:编程简单。
缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户.
smack是一个用 java 写的XMPP客户端代码库, 是 spark 的核心.
二、Smack的优点
1:Smack是一个简单的,功能强大的类库。给用户发送信息只需三行代码便可完成
XMPPConnection connection = new XMPPTCPConnection(”jabber.org“);
connection.login(”mtucker”, “password”);
connection.createChat(”jsmith@jivesoftware.com“).sendMessage(”Howdy!”);
2:不会强迫你向其他类库那样,在信息包层面进行编码。它提供了更加智能化的类比如Chat,能使你的工作更富效率。
3:不需要你熟悉XMPP XML格式,甚至是XML格式。
4:易于实现机-机对话。
5:Apace License下的开源软件。你可以把它用于你的商业或非商业程序。
好的不废话了,进入咱们的正题。aSmack4.0后和Smack基本差异也没那么大了,现在来说说aSmack4.0后版本的配置和使用
一、我们先到官网下载需要的jar包如果需要源码官方也是提供了的
当然开发之前别忘了先读一读官方提供的版本更新说明以及README不然你将会有大麻烦的
4.0以后改动略大了点使用前需要导入两个包我用的是asmack-android-8-4.0.5.jar和dnsjava-2.1.3.jar可别忘了dnsjava.jar不然SmackAndroid.init()会出问题的哦
好了,下面开始我们的注册
1、SmcakAndroid,init(getApplicationContext());初始化。
2、配置ConnectionConfiguration
configuration = new ConnectionConfiguration(config.getXmppHost(),config.getXmppPort(), config.getXmppServernanme());
//config.getXmppHost() openfir服务器地址 config.getXmppPort() 端口号(5222)config.getXmppServernanme()名字随意。Android默认为Smack
3、configuration.setSecurityMode(SecurityMode.disabled); 设置为disabled否则认证失败。
4、connection = new XMPPTCPConnection(configuration); 好的配置完成了,下面是开始注册就直接贴代码了
/**
* 注册
*
* @param account
* 注册帐号
* @param password
* 注册密码
*/
public int regist(String account, String password) {
try {
XMPPConnection connection = XMPPConnectionManager.getInstance()
.getConnection();
connection.connect();
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
Map<String, String> map = new HashMap<String, String>();
map.put("username", account);
map.put("password", password);
reg.setAttributes(map);
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = XMPPConnectionManager.getInstance()
.getConnection().createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getDefaultPacketReplyTimeout());
System.out.println("-----------------result--------------------"
+ result);
collector.cancel();// 停止请求results(是否成功的结果)
} catch (Exception e) {
e.printStackTrace();
return Constant.LOGIN_ERROR;
}
return Constant.LOGIN_SECCESS;
}
注意事项:
1、需要注意点是注册是需要异步操作否则连接异常
2、aSmack对ADT要求蛮高,最好是23及以上,否则出现各种奇葩错误
好的,今天就到这了,希望能帮到大家