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

[size=large]代码工具部分:[/size]
1. 客户端代码(java):
下载自:https://github.com/tokudu/AndroidPushNotificationsDemo
2. 服务器端代码(php):
下载自:https://github.com/tokudu/PhpMQTTClient
3. RSMB部分
Really Small Message Broker (RSMB) 需要在IBM网站下载。
(附件亦包含下载)

[size=large]配置部分:[/size]
[size=medium]1. 客户端:[/size]
a. 因为工程本身是很早的工程,那时ADT还没有要求外部包一定要放在libs下,而这个老工程是这样的。虽然运行时没有问题,但一点start就是crash,提示如下:
[quote]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
... [/quote]
解决办法只有将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的电脑)的地址。

[size=medium]2. 服务器部分[/size]。
[size=small]a. 工程环境。[/size]
此为PHP代码,所以要求有PHP环境,我系统为MAC也正好装了Brew在同事提点下,我使用了Brew进行安装。
[i]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 成功。[/i]
因为网络不好,中间多次卡住。果断Ctrl+C, 感谢Brew的断点续传功能。

完成安装后有如下提示:
[quote]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"[/quote]
不过同事说先不管,我也没管。

[size=small]b. 确认apache状态[/size]
在浏览器试了http://localhost.得到it works知道 apache是工作的。
但为了更加确认,在/Library/WebServer/Documents 下新建了一个test.html
在浏览器试http://127.0.0.1/test.html 得到了内容。知道明确apache没有问题,也知道了php代码部署的位置是/Library/WebServer/Documents/下面。

[size=small]c. 确认php是否可以正常解析[/size]
在/Library/WebServer/Documents下写了个新的文件test.php内容为
<?php
phpinfo();
在浏览器中访问http://127.0.0.1/test.php
如得到
[quote]<?php
phpinfo();[/quote]
则php解析不成功。

在同事指导下在
/private/etc/apache2/httpd.conf 中添加了如下行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml

然后重启了apache

[size=small]d.重启apache[/size]
i. apachectl status 没用所以要重启
ii. ps aux | grep httpd
[quote]_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[/quote]
得到了当前打开的什么 最后一个是自己打开的。
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配置结束。
这一步做为客户端程序员个人的确不懂在干嘛。

[size=small]e. 布置代码。[/size]
将代码放在/Library/WebServer/Documents/

[size=medium]3. RSMB部分[/size]
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标识手机。

更多相关文章

  1. [原创]通过代码及流程图说明Google在Android上的Push机制的实现
  2. android使用AlertDialog提示 Unable to add window -- token nul
  3. Android Studio xml android标签突然没有代码提示问题的解决
  4. Android填坑之旅(第十七篇)MIX2 适配看这一篇就够了,只需一行代码
  5. Android 代码实现查看SQLite数据库中的表
  6. android:如何在java代码中覆盖webview中的javascript事件
  7. android的代码性能优化
  8. Android导入工程提示Invalid project description

随机推荐

  1. Android 下载进度条, 自定义加载进度条,loa
  2. [置顶] Android技巧:ListView去掉默认橙黄
  3. android中清空一个表。类似truncate tabl
  4. 使android应用程序不出现在应用管理中
  5. cocos2d-x 2.x iOS和android多分辨率适配
  6. Android Studio: 模拟器启动失败解决(Emul
  7. android学习笔记----多线程断点续传下载
  8. android 调用 react-native方法
  9. Android 功耗优化(5)---Android O 的Doze模
  10. Android 知识图谱