安卓消息推送开发,android如何实现消息推送?有哪些方式?各自的优缺点是什么?

安卓消息推送开发目录

安卓消息推送开发

android如何实现消息推送?有哪些方式?各自的优缺点是什么?

android应用消息提醒功能怎么做

如何采用MQTT协议实现android消息推送

安卓消息推送开发

    安卓消息推送开发通常涉及到以下几个步骤:

    2. 集成推送服务:对于使用GCM/FCM的方式,你需要集成Google的推送服务。首先需要在Google Cloud Platform上创建项目并获取相关的凭证。

    3. 配置Manifest:在AndroidManifest.xml中添加必要的权限和接收器。

    4. 创建接收器:创建一个BroadcastReceiver来接收推送消息。

    5. 发送推送消息:使用推送服务的API发送消息到目标设备。

    6. 处理推送消息:在应用中处理接收到的推送消息。

    7. 优化和测试:根据需要优化推送逻辑,并进行充分测试。

    ### 1. 添加必要的权限

    在`AndroidManifest.xml`中添加以下权限:

    ```xml

    u003cuses-permission android:name=-permission android:name=_LOCKsignature 注册Intent Service和Broadcast Receiver

    创建一个`GCMIntentService`类和一个`GCMBroadcastReceiver`类。这些类将处理GCM的逻辑。

    ### 3. 在Manifest中注册Broadcast Receiver和Intent Service

    ```xml

    u003creceiver

     android:name=android:permission==

     u003c/intent-filteru003e

    u003c/receiveru003e

    u003cservice android:name=GCMIntentService`中处理接收到的消息。例如:

    ```java

    @Override

    protected void onHandleIntent(Intent intent) {

     Bundle extras = intent.getExtras();

     GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

     String messageType = gcm.getMessageType(intent);

     if (!extras.isEmpty()) {

     if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {

     // Handle message send error...

     } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {

     // Handle message deleted...

     } else if (!extras.isEmpty() u0026u0026 GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {

     // Handle normal message...

     }

     } else {

     // Handle error via IntentService as recommended by Google... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... } } } } } catch (Exception e) { // Handle exceptions... } finally { // Stop the service if necessary... }

    ```

android如何实现消息推送?有哪些方式?各自的优缺点是什么?

【答案】:实现消息推送的方式有五种,分别是轮询,SMS,C2DM,MQTT,XMPP最常使用的是XMPP, 我们做项目时采用的是XMPP协议

1.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。

它的特点是将复杂性从客户端转移到了服务器端。

GTalk、QQ、IM等都用这个协议。

2.轮询:客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送, 而是去服务端拽数据。

但是实现简单,主要缺点:耗电,浪费用户流量等

3.Google的C2DM,具体不细说,缺点,服务器在国外,不是很稳定。

4.通过短信方式, 但是很难找到免费短信平台

5. MQTT协议, IBM提供的一种推送服务,不太灵活

android应用消息提醒功能怎么做

自定义消息推送的话,需要使用长连接保持客户端不掉线,然后服务器中需要记录客户端唯一标识符与其对应连接,服务器获取消息后,向指定客户端连接发送消息,如果发送失败,定时器应该在tick到达时再次尝试。

如何采用MQTT协议实现android消息推送

MQTT协议实现android消息推送,我想每个Android开发人员对它应该都是比较熟悉的。

MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。

这些特点使它适用于受限环境。

例如,但不仅限于此:网络代价昂贵,带宽低、不可靠。

在嵌入设备中运行,处理器和内存资源有限。

该协议的特点有:使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

对负载内容屏蔽的消息传输。

使用 TCP/IP 提供网络连接。

有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。

会发生消息丢失或重复。

这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

“至少一次”,确保消息到达,但消息重复可能会发生。

“只有一次”,确保消息到达一次。

这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。

使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制MQTT最简单的使用包括两种,一种是发消息,一种是订阅消息。

发消息就是向一个固定IP地址的某个主题发送消息(publish)订阅消息是向服务器端订阅某些主题,当其他客户端向服务器的这个主题广播消息时,那么所有订阅这个主题的客户端就都能收到了MQTT是一项消息传递技术,由IBM再2001年发布。

总结一下,机制就是使用一个代理服务器message broker,客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息,同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。

package com.pig.test.mqtt;002003 import com.ibm.mqtt.MqttClient;004 import com.ibm.mqtt.MqttException;005 import com.ibm.mqtt.MqttSimpleCallback;006007 public class SubscribeClient {008 private final static String CONNECTION_STRING = tcp://192.168.1.60:1883;009 private final static boolean CLEAN_START = true;010 private final static short KEEP_ALIVE = 30;//低耗网络,但是又需要及时获取数据,心跳30s011 private final static String CLIENT_ID = client1;012 private final static String[] TOPICS = {013 Test/TestTopics/Topic1,014 Test/TestTopics/Topic2,015 Test/TestTopics/Topic3,016 tokudu/client1017 };018 private final static int[] QOS_VALUES = {0, 0, 2, 0};019020 //////////////////021 private MqttClient mqttClient = null;022023 public SubscribeClient(String i){024 try {025 mqttClient = new MqttClient(CONNECTION_STRING);026 SimpleCallbackHandler simpleCallbackHandler = new SimpleCallbackHandler();027 mqttClient.registerSimpleHandler(simpleCallbackHandler);//注册接收消息方法028 mqttClient.connect(CLIENT_ID+i, CLEAN_START, KEEP_ALIVE);029 mqttClient.subscribe(TOPICS, QOS_VALUES);//订阅接主题030031 /**032 * 完成订阅后,可以增加心跳,保持网络通畅,也可以发布自己的消息033 */034035 mqttClient.publish(PUBLISH_TOPICS, keepalive.getBytes(), QOS_VALUES[0], true);036037 } catch (MqttException e) {038 // TODO Auto-generated catch block039 e.printStackTrace();040 }041 }042043 /**044 * 简单回调函数,处理client接收到的主题消息045 * @author pig046 *047 */048 class SimpleCallbackHandler implements MqttSimpleCallback{ 049050 /**051 * 当客户机和broker意外断开时触发052 * 可以再此处理重新订阅053 */054 @Override055 public void connectionLost() throws Exception {056 // TODO Auto-generated method stub057 System.out.println(客户机和broker已经断开);058 }059060 /**061 * 客户端订阅消息后,该方法负责回调接收处理消息062 */063 @Override064 public void publishArrived(String topicName, byte[] payload, int Qos, booleanretained) throws Exception {065 // TODO Auto-generated method stub066 System.out.println(订阅主题: + topicName);067 System.out.println(消息数据: + new String(payload));068 System.out.println(消息级别(0,1,2): + Qos);069 System.out.println(是否是实时发送的消息(false=实时,true=服务器上保留的最后消息): + retained);070 }071072 }073074 /**075 * 高级回调076 * @author pig077 *078 */079 class AdvancedCallbackHandler implements MqttSimpleCallback{080081 @Override082 public void connectionLost() throws Exception {083 // TODO Auto-generated method stub084085 }086087 @Override088 public void publishArrived(String arg0, byte[] arg1, int arg2,089 boolean arg3) throws Exception {090 // TODO Auto-generated method stub091092 }093094 }095096 /**097 * @param args098 */099 public static void main(String[] args) {100 // TODO Auto-generated method stub101 new SubscribeClient( + i);102103 }104105 }

(随机推荐阅读本站500篇优秀文章点击前往:500篇优秀随机文章)
来源:本文由易搜IT培训资讯原创撰写,欢迎分享本文,转载请保留出处和链接!