Smack开发总结 (二)登录注册 与 好友管理

《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 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 addresses);

    /**
     * 添加好友的时候,状态变化回回调,返回添加好友的XMPP地址集合
     */
    public void entriesUpdated(Collection addresses);

    /**
     * 好友信息更新的时候回调,返回添加好友的XMPP地址集合。一般可以利用更新本地数据库
     */
    public void entriesDeleted(Collection addresses);

    /**
     * 删除好友的时候,状态变化回调,返回添加好友的XMPP地址集合
     */
    public void presenceChanged(Presence presence);

** RosterEntries** 顾名思义,这个监听主要针对获取好友回调监听,例如以下分析:

        /*
         * 一般会利用在查询当前用户好友的时候,回调具体的RosterEntry,然后进行本地数据库数据持久化
         */
 public void rosterEntires(Collection rosterEntries);

默认情况下,对于好友管理的回调监听这两个即可,如果自身在应用程序程序开发的时候。也许还是需要外部的回调接口作为连接其他controller的通信。这个得具体根据业务、在适当的、合理的数据通信。明天继续补充,好友管理的一些基本操作。

傻小孩b mark共勉,写给在成长路上奋斗的你

你可能感兴趣的:(Smack开发总结 (二)登录注册 与 好友管理)