一、搭建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(&#