首先这个在网络上已经有很多示例了,这里我只是写下自己的流程和需要的问题。
代码工具部分:
1. 客户端代码(java):
下载自:https://github.com/tokudu/AndroidPushNotificationsDemo
2. 服务器端代码(php):
下载自:https://github.com/tokudu/PhpMQTTClient
3. RSMB部分
Really Small Message Broker (RSMB) 需要在IBM网站下载。
(附件亦包含下载)
配置部分:
1. 客户端:
a. 因为工程本身是很早的工程,那时ADT还没有要求外部包一定要放在libs下,而这个老工程是这样的。虽然运行时没有问题,但一点start就是crash,提示如下:
引用
09-16 14:48:13.385: E/AndroidRuntime(26083): FATAL EXCEPTION: main
09-16 14:48:13.385: E/AndroidRuntime(26083): java.lang.VerifyError: com/tokudu/demo/PushService
09-16 14:48:13.385: E/AndroidRuntime(26083): at com.tokudu.demo.PushActivity$1.onClick(PushActivity.java:32
...
解决办法只有将jar包放在libs下,并将之前工程对jar包的引用删除(从javabuild path中移除)即可。
b. 还是因为同样的原因,工程本身是很早的工程。那里SDK还没有要求网络请求一定要在非UI线程,而这里连接Push服务器是在Service中并没有在单独的线程。所以可以改进一下,避免ANR。
c. 将工程中的
// the IP address, where your MQTT broker is running.
private static final String MQTT_HOST = "209.124.50.174";
地址改为电脑自已电脑(运行RSMB的电脑)的地址。
2. 服务器部分。
a. 工程环境。
此为PHP代码,所以要求有PHP环境,我系统为MAC也正好装了Brew在同事提点下,我使用了Brew进行安装。
i. brew install php54失败。
ii. brew install josegonzalez/php/php54失败。并提示Please tap it and then try again: brew tap josegonzalez/php
iii. brew tap josegonzalez/php 有用。
iv. brew install josegonzalez/php/php54 再试失败。 并提示Please tap it and then try again: brew tap homebrew/dupes
v. brew tap homebrew/dupese有用。
vi. brew install php54 成功。
因为网络不好,中间多次卡住。果断Ctrl+C, 感谢Brew的断点续传功能。
完成安装后有如下提示:
引用
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php5_module /usr/local/opt/php54/libexec/apache2/libphp5.so
The php.ini file can be found in:
/usr/local/etc/php/5.4/php.ini
✩✩✩✩ PEAR ✩✩✩✩
If PEAR complains about permissions, 'fix' the default PEAR permissions and config:
chmod -R ug+w /usr/local/Cellar/php54/5.4.19/lib/php
pear config-set php_ini /usr/local/etc/php/5.4/php.ini
✩✩✩✩ Extensions ✩✩✩✩
If you are having issues with custom extension compiling, ensure that this php is
in your PATH:
PATH="$(brew --prefix josegonzalez/php/php54)/bin:$PATH"
不过同事说先不管,我也没管。
b. 确认apache状态
在浏览器试了http://localhost.得到it works知道 apache是工作的。
但为了更加确认,在/Library/WebServer/Documents 下新建了一个test.html
在浏览器试http://127.0.0.1/test.html 得到了内容。知道明确apache没有问题,也知道了php代码部署的位置是/Library/WebServer/Documents/下面。
c. 确认php是否可以正常解析
在/Library/WebServer/Documents下写了个新的文件test.php内容为
<?php
phpinfo();
在浏览器中访问http://127.0.0.1/test.php
如得到
引用
<?php
phpinfo();
则php解析不成功。
在同事指导下在
/private/etc/apache2/httpd.conf 中添加了如下行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml
然后重启了apache
d.重启apache
i. apachectl status 没用所以要重启
ii. ps aux | grep httpd
引用
_www 38667 0.0 0.0 2437464 1708 ?? S 1:06pm 0:00.00 /usr/sbin/httpd
_www 38666 0.0 0.0 2437464 1764 ?? S 1:06pm 0:00.00 /usr/sbin/httpd
_www 38665 0.0 0.0 2437464 1756 ?? S 1:06pm 0:00.00 /usr/sbin/httpd
_www 38664 0.0 0.0 2437464 1792 ?? S 1:05pm 0:00.00 /usr/sbin/httpd
root 38663 0.0 0.0 2437464 2368 ?? Ss 1:05pm 0:00.13 /usr/sbin/httpd
xxxx 38790 0.0 0.0 2432768 596 s002 S+ 1:26pm 0:00.00 grep httpd
得到了当前打开的什么 最后一个是自己打开的。
iii. kill 除自己打开的这个之外的。
sudo kill 38667
sudo kill 38666
sudo kill 38665
sudo kill 38664
sudo kill 38663
iv. sudo apachectl start
v. 在浏览器中再次查看
http://127.0.0.1/test.php
可以看到一个有php信息的页面。
至此php配置结束。
这一步做为客户端程序员个人的确不懂在干嘛。
e. 布置代码。
将代码放在/Library/WebServer/Documents/
3. RSMB部分
1. Mac下则执行 XXXX/rsmb/mac/broker
如果直接将文件拖至终端会不成功。提示CWNAN9989W Could not open message file ../messages/Messages.1.2.0
应该cd至$ XXX/rsmb/mac
$ ./broker
2. 浏览器中打开
http://127.0.0.1/mqtt/index.php 此时可以给手机发Push消息了。
ps: 这里多说一句,也让自己记住。
1. 这里其它没完,只是收消息,没有发消息。
2. 原理不清,大致是服务器部署的代码 发消息给 RSMB。 RSMB用于给手机发消息。通过手机的ID标识手机。