查阅了一些网上关于Android上实现推送的文章 , 常用的实现方法有:
1.使用android默认C2DM框架
2. APP 保持轮循
3. 采用XMPP协议,自己搭建推送服务器
下面介绍一下自己在ubuntu11.04下搭建XMPP推送服务器的方法:
1. 下载Android Push Notification 相关包,包括
androidpn-server-0.5.0-bin.zip
androidpn-demoapp-0.5.0.zip
2. 安装apache2 ,eclipse,android SDK
3. 启动apache服务,并且停止iptables
手动添加iptables规则
socol@socol:~$ sudo vim /usr/bin/iptables-stop.sh
socol@socol:~$ sudo chmod 750 /usr/bin/iptables-stop.sh
socol@socol:~$ sudo chown root:root /usr/bin/iptables-stop.sh
内容如下:
#! /bin/sh # 清空 filter 表格規則(無指定表格,則為 filter 表格) iptables -X # 清空 nat 表格規則 iptables -t nat -F iptables -t nat -X # 清空 mangle 表格規則 iptables -t mangle -F iptables -t mangle -X # 指定 filter 表格預設規則 # INPUT、FORWARD、OUTPUT 皆為放行 iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
清除防火墙:
socol@socol:~$ sudo /usr/bin/iptables-stop.sh
4. 运行解压后的androidpn-server
socol@socol:~/下载/androidpn-server-0.5.0/bin$ mkdir ../logs socol@socol:~/下载/androidpn-server-0.5.0/bin$ ./run.sh
5. 在firefox中输入127.0.0.1:7070,显示设备和推送管理页面
6. 将androidpn-demoapp导入eclipse中
运行后出现错误:
W/Cannot connect to server.( 1052): 0 W/System.err( 1052): XMPPError connecting to 127.0.0.1:5222.: remote-server-error(502) XMPPError connecting to 127.0.0.1:5222. W/System.err( 1052): -- caused by: java.net.ConnectException: /127.0.0.1:5222 - Connection refused
根据提示 ,修改androidpn-demoapp-0.5.0/res/raw/androidpn.properties:
apiKey=1234567890 xmppHost=10.0.2.2 xmppPort=5222
7. 在firefox中发送消息:
8. 模拟器/手机上接受到消息: