首页 > 解决方案 > 在没有 fcm 、 pusher 的情况下创建我自己的推送通知服务,

问题描述

我想创建一个不基于 Google 服务或类似服务的通知系统提供程序。事实上,我想获取有关其整体架构和所需 Android sdk功能的信息。

对我来说最奇怪的一点是了解如何向 Android 设备发送通知。

我的意思是,我如何从互联网上数以百万计的其他 Android 设备中识别出安装了我的应用程序的 Android 设备?

我如何向他发送信息?我应该为这个或类似的东西使用套接字吗?

标签: androidpush-notificationsdknotificationservices

解决方案


简单的回答:你不能

在所有其他事情之前,我应该更正您的问题,pusher 和 FCM 根本不在同一个组中!您可以构建诸如 pusher 或 oneSignal 之类的东西,但您不能构建诸如 FCM/APNS 之类的东西

您应该了解以下三个简单但重要的句子:

  1. 当您想将任何内容从place_1(例如 api)拉到place_2(例如 browser_client)时,您最有一个 place_1_resource 的标识符(通常是 api 的统一资源定位器)
  2. 当您想将任何内容从place_1(例如 notification_central_server)推送到place_2(cellphone_client)时,您最有一个 place_2_resource 的标识符
  3. 您必须知道真正的服务器推送类似服务器推送的技术(如长拉或......)之间的区别,并且您应该知道这个概念的意图是真正的服务器推送,而不是任何类型的推送拉夹克!

如果您没有要向其发送通知的手机的任何标识符,则您的服务器不知道在哪里发送该通知,因此我们需要一个用于手机的 resource_identifier_like这实际上是一个device_token_like并且您只有一种方法可以得到这个device_token_like 这就是 FCM/APNS

FCM 就像一个 dns 服务器,包含 google 支持的每个 android 设备(几乎每个 android 设备)的所有标识符,APNS 是一样的,但对于苹果设备

注意1:即使您的应用程序可以获得它对应的设备device_token_like,如果它没有在FCM/APNS上注册,它也不能用于推送通知

因此,当您现在获得所需 clinet_device 的 device_token_like 标识符时,您可以使用不同的方法将某物发送到该 clinet_device。有几种方法,如 SSE、Webpush、HTTP_server_push、Pushlet 等,但这些设备的母公司都不支持这些方法,唯一完全支持和标准的方法是 FCM/APNS 官方网站建议的方法

例如,由于美国制裁,名为najva的伊朗公司使用 webpush 发送通知,但 webPush 方法在浏览器和安卓设备上运行良好,但它们甚至没有出现在苹果设备上

最后我应该说,我很佩服你的好奇心,在你的开发中减少使用像 FCM/APNS 这样的基于利益的公司的任何东西,但我强烈推荐这些文章和书籍给你,因为我认为你没有学到足够的东西:

  1. 推技术维基百科
  2. 一些人试图制作自己的推送通知服务的故事
  3. 推送技术完整指南 - 2020 版
  4. 使用 HTML5 SSE 的数据推送应用

推荐阅读