Android MQTT 实现Push

首先这个在网络上已经有很多示例了,这里我只是写下自己的流程和需要的问题。

代码工具部分:
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标识手机。







你可能感兴趣的:(Android MQTT 实现Push)