《Smack开发总结 (二)登录注册 与 好友管理》
转载请注明来自 傻小孩b_移动开发(http://www.jianshu.com/users/d388bcf9c4d3)喜欢的可以关注我,不定期总结文章!您的支持是我的动力哈!
对于即时通讯,当然少不了好友管理模块了。openfire也是没有例外,底层有对好友进行基本的操作分装(添加好友、删除好友、好友分组等功能),上一篇总结了smack中的管理连接,这一篇总结下登录注册与好友管理
登录注册与好友管理
一、登录注册
对于4.1.8版本的smack,登录注册集成封装在XMPPTCPConnection API中,例如以下代码:
// 登录关键代码
try {
this.mConnection.login(account,password);
} catch (Exception e) {
getmLetterListener().sendHandlerLetter(SnakeServiceManager.HANDLER_CODE_LOGIN_FAILED,e);
}
// 注册关键代码
Map<String, String> map = new HashMap<>();
map.put("account",account);
map.put("password",password);
map.put("android","");
Registration mRegistration = new Registration(map);
mRegistration.setType(IQ.Type.set);
mRegistration.setTo(this.mConnection.getServiceName());
try {
this.mConnection.sendStanza(mRegistration);
StanzaFilter filter = new AndFilter(new StanzaIdFilter(mRegistration.getStanzaId()), new StanzaTypeFilter(IQ.class));
PacketCollector collector = mConnection.createPacketCollector(filter);
IQ result = (IQ) collector.nextResult(mConnection.getPacketReplyTimeout());
collector.cancel();
if (result == null || result.getType() == IQ.Type.error) {
// register error
} else {
// register suceess!
}
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
二、好友管理
(1) 好友管理类 Roster 实例化
对于4.1.8版本的smack,首先好友管理由 org.jivesoftware.smack.roster.Roster类进行模块管理,本质上是用单例模式进行实例化,我们可以通过以下代码进行实例化:
Roster mRoster = Roster.getInstanceFor(this.mConnection);
mRoster.setSubscriptionMode(Roster.SubscriptionMode.manual);// 设置对方添加自己好友,需要询问
(2) 好友状态监听
进行好友状态监听,一般可以用来监听好友状态(是否在线)、好友添加、查询好友结果等作用。只需要将实例化的Roster进行监听即可
mRoster.getEntriesAndAddListener(#RosterListener, #RosterEntries);
** RosterListener ** 顾名思义,这个监听主要针对好友状态监听,例如以下分析:
/**
* 添加好友的时候,状态变化回回调,返回添加好友的XMPP地址集合
*/
public void entriesAdded(Collection<String> addresses);
/**
* 添加好友的时候,状态变化回回调,返回添加好友的XMPP地址集合
*/
public void entriesUpdated(Collection<String> addresses);
/**
* 好友信息更新的时候回调,返回添加好友的XMPP地址集合。一般可以利用更新本地数据库
*/
public void entriesDeleted(Collection<String> addresses);
/**
* 删除好友的时候,状态变化回调,返回添加好友的XMPP地址集合
*/
public void presenceChanged(Presence presence);
** RosterEntries** 顾名思义,这个监听主要针对获取好友回调监听,例如以下分析:
/*
* 一般会利用在查询当前用户好友的时候,回调具体的RosterEntry,然后进行本地数据库数据持久化
*/
public void rosterEntires(Collection<RosterEntry> rosterEntries);
默认情况下,对于好友管理的回调监听这两个即可,如果自身在应用程序程序开发的时候。也许还是需要外部的回调接口作为连接其他controller的通信。这个得具体根据业务、在适当的、合理的数据通信。明天继续补充,好友管理的一些基本操作。
傻小孩b mark共勉,写给在成长路上奋斗的你