Android客户端消息推送的原理和方式

首先简单介绍一下Android消息推送的主要三种方式,如果你已经看过类似的文章,请直接忽略三种介绍。

    1.SMS服务的方式

     使用SMS服务,即服务器端发送短信,然后手机客户端监听短信的广播,然后对数据进行一定的处理,达到消息推送的目的。好处就是省电,省流量,但是运营商会很费钱。毕竟发送短信都是需要金钱支持的,并且会有环境的限制。平板、或者用户停机的情况下,就没有办法使用推送了。所以这种解决方案,仅仅是在某些及其特殊的情况下(移动、联通、电信这种公司)才会使用。

  2.轮询的方式

    使用轮询的方式来从网络中主动获取数据。费电、费流量。这种方式方便理解,实现也较为简单(我们的近乎客户端1.0就是这么实现推送的)。如果只是做个Demo的情况下还是可以使用。但是作为正在运行的应用,不论你怎么优化,一般是会比较耗费流量的,毕竟一直在获取网络中的数据。

    3.长连接的方式

      使用长连接的方式,一般来说,推送的主要数据,都是依赖于这种方式进行数据推送的。省流量、费电。简单介绍一下原理,原理就是跟服务器端建立一条长时间的数据流连接,服务器一直在等待手机客户端中的数据。因为连接是持续的,并且没有数据流操作,所以网络中的流量还是相对较为节省的。但是因为一直保持网络中的连接,所以这种消息推送,肯定是比较费电的。很多软件就是这样制作的。像苹果、Android推荐使用的C2DM都是使用的这种模式(苹果处理的比较好的地方,是整个手机只是用一个连接,原本Android也想使用这种模式,无奈Google的服务器在美国,介于天朝防火墙的问题,这种推送会不稳定)。但是这种模式下也会有一定的缺陷,在网络不稳定的情况下(火车、公交车、开车都会造成网络不稳定),Socket比较容易断开。连接不稳定的情况下。推送数据容易失败。还是有不少推送的组件都是基于这种模式做的。

然后简单介绍一下,近乎客户端的消息推送的规划。在近乎客户端中,应用到推送的功能模块并不是很多,有私信、通知、请求、即时聊天功能(正在规划中)。其中私信、通知、请求属于非即时性需求,简单的延迟个几分钟关系也不是很大(比如说,你的同学在站点中AT了你,你在五分钟之后才对他的这个动作处理,也没有什么太大的问题),即时聊天属于即时性功能(想想一下,你的老婆跟你说,想你了,你过了二十分钟之后才回一句,……)。这两种是完全不同的两种需求。本次我们只介绍前面那种。

分别介绍一下手机客户端和服务器端要进行的处理,请一边看图一边理解。



手机客户端要先询问服务器是否允许Socket连接,不允许处理很简单,直接使用轮询的方式获取数据。如果服务器端允许连接,那么就尝试连接,并且检测Socket是否可用。如果长时间网络不稳定,则侧向与轮询,并且检测网络环境是否稳定。等到网络稳定的时候再使用Socket进行数据推送。
    服务器端,首先检测是否启用了Socket,如果启用了。就等待手机连接客户端,等到客户端连接之后将数据推送给手机。
这样数据就可以较为正常的推送给手机客户端了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
服务器向 Android 客户端推送数据的一种常用方法是使用 Google Firebase Cloud Messaging(FCM)服务。FCM 是 Google 提供的一项推送服务,可以让开发者向 Android 设备发送推送通知和数据消息。 以下是使用 FCM 向 Android 设备发送推送消息的一般步骤: 1. 创建 Firebase 项目并在 Android 应用中集成 FCM SDK。 2. 在 Firebase 控制台中创建一个新的 Firebase 消息传递服务。 3. 使用 FCM 的 API 向服务器发送推送消息。 4. 在 Android 应用中处理收到的推送消息。 下面是一个简单的示例,展示如何使用 FCM 向 Android 设备发送推送消息。 1. 创建 Firebase 项目并在 Android 应用中集成 FCM SDK。 首先,您需要在 Firebase 控制台中创建一个新的项目,并在 Android 应用中添加 FCM SDK 的依赖项。您可以按照 Firebase 文档中的指示完成这些步骤。 2. 在 Firebase 控制台中创建一个新的 Firebase 消息传递服务。 接下来,您需要在 Firebase 控制台中创建一个新的 Firebase 消息传递服务,并获取一个用于身份验证的服务器密钥。您可以在 Firebase 控制台的“设置”菜单中找到这些信息。 3. 使用 FCM 的 API 向服务器发送推送消息。 使用以下代码,向 FCM 服务器发送一个消息: ```java URL url = new URL("https://fcm.googleapis.com/fcm/send"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Authorization", "key=" + SERVER_KEY); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestMethod("POST"); conn.setDoOutput(true); JSONObject json = new JSONObject(); json.put("to", DEVICE_TOKEN); JSONObject info = new JSONObject(); info.put("title", "FCM Notification Title"); // Notification title info.put("body", "Hello Test notification"); // Notification body info.put("click_action", "OPEN_APP"); json.put("notification", info); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(json.toString()); wr.flush(); ``` 在这个示例中,我们首先创建一个 URL 对象,然后使用它创建一个 HttpURLConnection 对象。我们设置请求方法为 POST,然后设置请求头中的身份验证密钥和内容类型。接下来,我们创建一个 JSON 对象,设置推送目标和消息内容。最后,我们使用 OutputStreamWriter 将 JSON 对象写入请求的正文中,并发送请求。 4. 在 Android 应用中处理收到的推送消息。 在 Android 应用中,您需要创建一个 FirebaseMessagingService 类,并在其中重写 onMessageReceived 方法。在这个方法中,您可以处理收到的推送消息,并根据需要显示通知或执行其他操作。 ```java public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { // 处理收到的推送消息 String title = remoteMessage.getNotification().getTitle(); String body = remoteMessage.getNotification().getBody(); Intent intent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "default") .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle(title) .setContentText(body) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentIntent(pendingIntent) .setAutoCancel(true); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(0, builder.build()); } } ``` 在这个示例中,我们重写了 onMessageReceived 方法,并从 RemoteMessage 对象中获取通知标题和内容。然后,我们创建一个 PendingIntent 对象,并使用 NotificationCompat 构建器创建一个通知对象。最后,我们使用 NotificationManagerCompat 将通知显示在设备上。 请注意,这个示例中的代码仅仅是处理收到的推送消息,并显示一个通知。如果需要执行其他操作,还需要进行额外的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值