XMPP-Android基于openfire+asmack

这篇博客详细介绍了如何在Android上使用openfire和asmack实现XMPP通信。首先讲解了如何搭建openfire服务器,包括安装配置mysql和openfire。然后,文章深入探讨了在Android客户端开发中如何实现XMPP的各种功能,如连接、登录、消息收发、好友管理、群聊以及异常处理。最后,提到了一些可能出现的问题及解决方案,如异常处理和中文乱码问题。
摘要由CSDN通过智能技术生成

一、搭建openfire

mysql下载地址:http://pan.baidu.com/s/1qY2a6BU

openfire下载地址:http://download.csdn.net/detail/xsz_1025/9672665

1、安装配置mysql

如果下载的mysql是.exe格式,则无脑安装,以下着重介绍解压版mysql的配置

  • 将压缩包解压到想要安装的位置
  • 配置环境变量,在path后追加 mysql安装目录\bin
  • 修改配置文件,在mysql安装目录下的my-default.ini文件,打开找到如下位置
  • 以管理员身份运行cmd
  • 进入到bin目录(无论是否配置环境变量都需在bin目录下执行)
  • 输入命令 mysqld -install,我的已经导入过所以出现如下提示,如果没有导入过则成功后会提示Service successfully installed

  • 此时mysql已经配置完成,可以在任意目录启动mysql服务,命令 net start mysql
  • 登录mysql,首次登录没有密码,输入mysql -u root -p后出现如下所示

  • 直接回车即可


  • 创建数据库(注意为了让数据库支持中文,在创建时应选择utf8编码,如果此数据库是用于后续openfire,不是utf8的话会导致接收离线消息或其他中文信息时乱码)

2、安装配置openfire

  • 下载openfire安装文件,运行.exe
  • 当出现如下界面时,点击Launch Admin

  • 选择简体中文,点击继续
  • 配置域,点击继续。域为主机IP,注意不要写成127.0.0.1
  • 选择标准数据库连接,点击继续
  • 数据库驱动选择Mysql
  • 数据库URL改为jdbc:mysql://127.0.0.1:3306/dbname?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF8&charset=utf8&characterSetResults=UTF8(注意:127.0.0.1不要修改,dbname是你为openfire创建的数据库,此数据库创建时应选择UTF8编码)
  • 选择初始设置
  • 设置密码
  • 安装完成,可登录到控制台管理openfire

二、开发android客户端

网上大部分客户端都是可以运行的,虽然或多或少会有些问题。但是目前网上大多demo将功能与界面混在一起,且demo比较复杂,不利于理解移植。本文着重介绍asmack的各功能实现,更倾向于API的使用。如:如何建立连接、登录、注册、消息收发等。

下载asmack.jar包:http://download.csdn.net/detail/xsz_1025/9672818

1、建立连接

注意:需要网络权限

/**连接工具*/
public class XmppConnectionManager {
	private static XmppConnectionManager xmppConnectionManager;

	static {
		try {
			Class.forName("org.jivesoftware.smack.ReconnectionManager");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private XmppConnectionManager() {

	}

	public static XmppConnectionManager getInstance() {
		if (xmppConnectionManager == null) {
			xmppConnectionManager = new XmppConnectionManager();
		}
		return xmppConnectionManager;
	}

	public XMPPConnection init() {
		// 设置debug模式,true开启 false关闭
		Connection.DEBUG_ENABLED = true;
		// 配置provider
		configureProvider(ProviderManager.getInstance());
		ConnectionConfiguration connectionConfig = new ConnectionConfiguration("192.168.15.85", 5222);
		// 不使用SASL验证,设置为false
		connectionConfig.setSASLAuthenticationEnabled(false);
		connectionConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
		// 允许自动连接
		connectionConfig.setReconnectionAllowed(true);
		// 允许登陆成功后更新在线状态
		connectionConfig.setSendPresence(true);
		// 收到好友邀请后manual表示需要经过同意,accept_all表示不经同意自动为好友
		Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
		XMPPConnection connection = new XMPPConnection(connectionConfig);
		return connection;
	}

	public void configureProvider(ProviderManager pm) {

		pm.addIQProvider("query", "jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider());
		// Time
		try {
			pm.addIQProvider("query", "jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		// Roster Exchange
		pm.addExtensionProvider("x", "jabber:x:roster", new RosterExchangeProvider());
		// Message Events
		pm.addExtensionProvider("x", "jabber:x:event", new MessageEventProvider());
		// Chat State
		pm.addExtensionProvider("active", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
		pm.addExtensionProvider(&#
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值