xabber-android项目源码学习

本文详细介绍了学习Xabber Android项目源码的过程,包括如何运行项目,项目结构分析,以及如何在Xabber中添加红包功能。在添加红包功能时,涉及XML扩展、数据库操作、消息解析和监听,以及UI更新等内容。

初识Xabber

git地址:https://github.com/redsolution/xabber-android
Xabber是一款基于xmpp协议的多账号即时通讯App。关于XMPP协议就不多做说明。网上一大堆资料可以查询。最大的好处就是扩展性强。可以参考这篇文章:https://blog.youkuaiyun.com/wulex/article/details/83715175。

运行Xabber注意事项

1.使用最新版本的开发环境
2.clone代码到本地。
3.clone另外一个项目MemorizingTrustManager到本地引用为xabber的moudle.
4.将build.gradle中的dev,beta等productFlavors注释掉只留下open即可编译成功。
5.账号注册:app里的注册使用了google服务,而大多数的国产机都是没有的。可以直接到登录页里有网页注册的入口。注册号以后就可以使用了。

项目结构

Xabber包含了两个moudle。emoji和MemorizingTrustManager。emoji表情都熟悉。MemorizingTrustManager是用来做SSL证书的。项目的主要代码在main目录下分为android和xmpp。我们暂时只需要关注android下面的代码即可。打开android目录可以看到四大组件的区分模块还是很明显的。data目录下主要做数据操作,receiver,ui,service基本就是四大组件的分类了。再加上一个util工具包,一个presentation自定义View。

增加红包功能

XML是XMPP数据结构的核心,通过扩展xml标签,我们可以完成很多功能。运行项目以后发现真正通讯模块里面只有发文字消息和图片消息。这里我们增加发红包功能,领红包和消息撤回三个功能。以发红包为例先上图:
在这里插入图片描述
要实现这样一个功能,大致的流程是:
首先。对xml进行扩展。继承元素扩展类ExtensionElement 。定义好标签及其属性。

 public static class RedEnvelopeType implements ExtensionElement {
        public static final String NAMESPACE = "urn:xmpp:redenvelope-element";
        //自定义的标签名
        public static final String ELEMENT = "redenvelope";
		//预留的类型字段
        private String type;
        //红包祝福语
        private String remarks;
        //红包金额
        private String money;

        public RedEnvelopeType(String type, String remarks, String money) {
            this.type = type;
            this.remarks = remarks;
            this.money = money;
        }

        @Override
        public String getElementName() {
            return ELEMENT;
        }

        @Override
        public CharSequence toXML() {
            XmlStringBuilder xml = new XmlStringBuilder(this);
            // Add attribute
            xml.optAttribute("type", getType());
            xml.optAttribute("remarks", remarks);
            xml.optAttribute("money", String.valueOf(money));
            xml.rightAngleBracket();

            xml.append("红包{" + remarks + "]");

            xml.closeElement(this);
            return xml;
        }

        @Override
        public String getNamespace() {
            return NAMESPACE ;
        }
    }

有了扩展的标签,我们就可以发送扩展信息了。当然在发送之前也要做些UI及数据库方面的工作,如:输入红包金额,祝福语。将要发送的信息更新到聊天页面列表。这里更新聊天列表需要注意,我们平时更新recycleView都是给adapter增加一条数据然后调用刷新功能。而这个demo用了Realm数据库保存发送的信息,Realm数据库可以对RealmResults监听数据变化,所以我们只需要往Realm数据库里增删改查,在数据变化监听方法里调用刷新功能就好了。切勿重复添加数据,参考类:RealmRecyclerViewAdapter。数据库方面需要注意数据库版本迁移,此demo消息的数据库在MessageDatabaseManager里面管理,其他的数据用RealmManager管理,版本迁移的时候不要弄错。
做完准备工作就可以构造要发送的消息了。

	//创建一条消息
   message = createMessagePacket(text, messageItem.getStanzaId());
   //如果是要发送红包消息 就将红包标签及其属性以DataForm加入消息扩展中
    if (messageItem.getMessage_type() == MessageItem.MessageType.REDENVELOPE) {
         DataForm dataForm = DataFormManager.redEnvelopeDataFrom(messageItem);
         message.addExtension(dataForm);
            }

   public static DataForm redEnvelopeDataFrom(MessageItem messageItem) {
        DataForm dataForm = new DataForm(DataForm.Type.form);
        for (RedEnvelope redEnvelo
1、Android团队提供的示例项目   如果不是从学习Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Android这个框架上开发。由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏、图像处理、时间显示、开始菜单快捷方式等。   2、 Remote Droid   RemoteDroid是一个Android应用,能够让用户使用自己的无线网络使用无线键盘、触摸屏操作手机。这个项目为开发者提供了如网络连接、触摸屏手指运动等很好的样例。   3、 TorProxy和Shadow   TorProxy应用实现了Android手机无线电电传通讯(TOR),和Shadow应用一起使用,可以使用手机匿名上网。从该项目源代码中,可以掌握socket连接、管理cookie等方法。      4、 Android SMSPopup   SMSPopup可以截获短信内容显示在一个泡泡形状的窗口中。从这个项目中可以掌握到如何使用内置的短信SMS接口。   5、 Standup Timer   Standup Timer应用用于控制站立会议时间,类似秒表倒计时,可以提醒每个人的讲话时间已到,从而保证每个与会者使用时间一样。从该项目的代码中,可以学会如何使用时间函数。另外,这个项目的代码是采用视图view、模型model严格分离的设计思路。      6、 Foursquare   是Foursquare.com的一个客户端应用,该应用主要分为两个模块:API(com.joelapenna.foursquare)和界面前端 (com.joelapenna.foursquared)两部分。从该项目代码中,可以学会如何同步、多线程、HTTP连接等技术。   7、 Pedometer   Pedometer应用用于记录你每天走路步数的。尽管记录不一定精准,但是从这个项目中,可以学习几个不同的技术:加速器交互、语音更新、后台运行服务等。   8、 OpenSudoku-android   OpenSudoku是一个简单的九宫格数独游戏。从代码中可以学习到如何在视图中显示表格数据,以及如何和一个网站交互等技术。   9、 ConnectBot   ConnectBot是Android平台的一个客户端安全壳应用。从该项目代码中,可以学习到很多Android安全方面的内容,这些是你在开发应用时经常需要考虑的安全问题。   10、 WordPress的Android应用   当然在最后不能不提WordPress的Android应用了,这是WordPress官方开发团队提供的一个项目。从代码中可以学习到XMLRPC调用(当然还有更多的优秀内容)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值