android - 在没有 fcm 、 pusher 的情况下创建我自己的推送通知服务,
问题描述
我想创建一个不基于 Google 服务或类似服务的通知系统提供程序。事实上,我想获取有关其整体架构和所需 Android sdk功能的信息。
对我来说最奇怪的一点是了解如何向 Android 设备发送通知。
我的意思是,我如何从互联网上数以百万计的其他 Android 设备中识别出安装了我的应用程序的 Android 设备?
我如何向他发送信息?我应该为这个或类似的东西使用套接字吗?
解决方案
简单的回答:你不能
在所有其他事情之前,我应该更正您的问题,pusher 和 FCM 根本不在同一个组中!您可以构建诸如 pusher 或 oneSignal 之类的东西,但您不能构建诸如 FCM/APNS 之类的东西
您应该了解以下三个简单但重要的句子:
- 当您想将任何内容从place_1(例如 api)拉到place_2(例如 browser_client)时,您最有一个 place_1_resource 的标识符(通常是 api 的统一资源定位器)
- 当您想将任何内容从place_1(例如 notification_central_server)推送到place_2(cellphone_client)时,您最有一个 place_2_resource 的标识符
- 您必须知道真正的服务器推送与类似服务器推送的技术(如长拉或......)之间的区别,并且您应该知道这个概念的意图是真正的服务器推送,而不是任何类型的推送拉夹克!
如果您没有要向其发送通知的手机的任何标识符,则您的服务器不知道在哪里发送该通知,因此我们需要一个用于手机的 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 这样的基于利益的公司的任何东西,但我强烈推荐这些文章和书籍给你,因为我认为你没有学到足够的东西:
推荐阅读
- php - 如何查看 Ajax 传递给 PHP 的数据以及 PHP 对数据的作用 - 下拉菜单选项
- regex - URl 正则表达式验证器 HTML5
- mysql - mysql覆盖索引是否遵循最左边的索引前缀?
- python - 如何使用行为在python中编写简单的组件测试
- sql-server - 将 SQL 行转换为列
- java - Spring @PropertySource 无法打开,因为它不存在
- javascript - 从用户服务中的firestore返回用户数据返回null
- javascript - 有没有办法在没有 setState 的情况下重新渲染功能性 React.js 组件?
- mysql - Mysql Query 从表中提取最新的 5 个搜索
- php - 更改apache端口后url不起作用?