`

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

    在"android-mqtt-push-master"这个压缩包中,可能包含了实现Android MQTT推送服务的源代码、示例、配置文件等资源。通过研究这些文件,开发者可以了解如何将MQTT集成到Android应用中,创建高效且可靠的推送服务。

    android Mqtt推送 源码

    在Android平台上实现MQTT推送,能够确保消息的可靠传输,即使在网络不稳定的情况下也能保持良好的用户体验。 1. **MQTT协议介绍** MQTT是一种基于发布/订阅模式的“轻量级”通信协议,最初设计用于远程位置和有限...

    MQTT协议,可以用于实现Android的push功能。

    目前市面上有许多优秀的库可以选择,如`mosquitto-android-client`、`AndroidMQTT`等。 2. **配置MQTT服务器**:搭建或选择一个MQTT服务器,并进行必要的配置,以支持客户端的连接请求。 3. **编写代码连接MQTT...

    Android Server Push - MQTT

    在Android平台上实现Server Push技术,MQTT(Message Queuing Telemetry Transport)协议是一个常见的选择。MQTT是一个轻量级的发布/订阅模型的网络协议,主要用于低带宽、高延迟或不可靠的网络环境中,特别适合...

    Android基于mqtt消息推送通知指南

    adoption of MQTT protocol enables real-time communication between Android client and App Server, solving the difficulty of Android push notification. 在 Android 消息推送通知中,C2DM 是一个重要的角色...

    mqtt协议实现 Android推送(服务端、客户端代码)

    本文将深入探讨如何使用MQTT协议在Android平台上实现推送服务,包括服务端和客户端的代码实现。 一、MQTT协议基础 1. **协议特点**:MQTT设计目标是低开销、低带宽和高可靠性,适用于移动设备和网络条件差的环境。...

    Android使用MQTT协议推送消息

    在提供的压缩包文件"push-MQTT"中,可能包含了完整的Android MQTT推送服务端和客户端示例代码,以及一个PDF文档,详细解释了如何集成和使用这些示例。阅读并研究这些资源可以帮助你更好地理解和实践Android上的MQTT...

    MQTTPush4Android:适用于 Android 的 MQTT 推送通知服务

    MQTTPush4Android 这是一个简单的 android 项目,用于演示基于 MQTT 的 android 推送通知。 项目有一个空白活动和一个服务。 该服务连接到公共 MQTT 代理并在默认端口 1883 中侦听任何通知。 这是一个公共 MQTT 代理...

    android xmpp push实现

    Android 平台上实现推送消息服务常常是一项挑战,因为系统本身并未提供一个完美无瑕的解决方案。本文主要探讨了如何在Android应用中实现XMPP(可扩展通讯和表示协议)推送,以及面对不同推送策略的优缺点。 XMPP是...

    mqtt 通讯关键代码

    在Android应用开发中,MQTT客户端库可以帮助开发者实现设备与服务器之间的实时数据交换。本篇文章将围绕"mqtt通讯关键代码"这一主题,详细介绍Android平台上实现MQTT通信的核心步骤。 首先,我们需要集成一个MQTT...

    Android push notification方案比较

    【Android Push Notification 方案比较】 在开发Android应用时,向用户实时推送通知是必不可少的功能,Android提供了多种推送通知方案,包括C2DM(Cloud to Device Messaging)、MQTT(Message Queuing Telemetry ...

    mqtt4android-master

    mqtt setHost host ; Default mqtt port is 1883 mqtt setPort 1883 ; Set a unique id for this client broker combination mqtt setId client ; Open the connection to the MQTT server mqtt...

    PushService:Android消息推送实践(WebSocketMQTTSocket)

    PushService Android消息推送实现(多种方案) 1. WebSocket 基于OkHttp( 提供的WebSocket接口实现推送 2. MQTT 基于mqtt( 实现推送 3. Socket 基于 java.net.Socket 长连接实现推送 项目地址:

    Android Push Notification

    本文将深入探讨Android Push Notification的实现,以及MQTT(Message Queuing Telemetry Transport)协议在此过程中的角色。 首先,Android Push Notification是一种服务,允许应用程序在不实际运行或者用户没有...

    send_mqtt.zip

    【标题】:“send_mqtt.zip”是一个包含与Android推送服务相关的资源文件的压缩包,主要关注MQTT(Message Queuing Telemetry Transport)协议在实现推送服务中的应用。 【描述】:“Android主流推送方案分析(MQTT...

    Android推送实现方案探讨

    ### Android推送实现方案探讨 #### 背景与概述 随着移动互联网的迅速发展,智能手机已成为人们日常生活中不可或缺的一部分。在此背景下,推送技术作为一种能够实时向用户传递信息的关键技术,在移动应用开发中扮演...

    MQTTAndroid客户端AndroidPushNotificationsDemo

    在这个项目“MQTTAndroid客户端AndroidPushNotificationsDemo”中,开发者提供了一个示例,展示了如何在Android平台上实现MQTT客户端,以便接收推送通知。 ** Android Push Notifications ** Android Push ...

Global site tag (gtag.js) - Google Analytics