Android中基于XMPP协议的即时聊天系统的开发笔记 - 注册、登陆
87Android中基于XMPP协议的即时聊天系统的开发笔记 - 注册、登陆登录前我们要知道用户名和密码(这不是废话么......),XMPP的用户名又称JID,先看一个XMPP的用户名范例:wumeng@yiqiwan.com/smack,wumeng相当于自定义的用户名,yiqiwan.com就是上文的结点标识符,smack可有可无,我理解为是资源标识符的意思,可以自己修改,Android中用asmack默认就是smack,我没管过它。
注册:
我们的服务器是HTTP+XMPP,常规数据从HTTP服务器获取,聊天才用XMPP;因为我们的用户是在网站注册,所以在后台我们注册用户以后直接向XMPP的服务器数据库中插入用户数据,不用客户端注册,不过为了写如何注册,我百度了一下,调试了一下,发现没有问题,就贴上来了:
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(BaseXmpp.getConnection().getServiceName());
reg.setUsername("wumeng");// 注意这里注册时,参数是用户名,不是JID,是@前面的部分。
reg.setPassword("mengge123");
reg.addAttribute("RegType", "Android");// 这边addAttribute不能为空,否则出错。
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
PacketCollector collector = BaseXmpp.getConnection().createPacketCollector(filter);
BaseXmpp.getConnection().sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止请求results(是否成功的结果)
if (result == null) {
System.out.println("服务器没有返回结果");
} else if (result.getType() == IQ.Type.ERROR) {
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
System.out.println("这个账号已经存在");
} else {
System.out.println("注册失败");
}
} else if (result.getType() == IQ.Type.RESULT) {
System.out.println("恭喜你注册成功");
}
代码稍微修改了一下,很简单清晰,没什么可说的reg.addAttribute这里可以添加自定义的字段,比如性别什么的,看自己需求了,但是不能为空,我这里用了注册类型。
登陆:
Asmack的登陆很简单,只需要JID前面的用户名和密码即可,无需再去拼装JID什么的,代码如下:
// 登陆XMPP服务器
BaseXmpp.getConnection().login("wumeng","mengge123");
登陆前最好用BaseXmpp.getConnection().isConnected()方法先验证下是否已经初始化XMPP,否则会报错;
登陆后可以使用BaseXmpp.getConnection().isAuthenticated()查看是否登陆成功
页:
[1]