使用 FCM 向订阅主题的所有设备(批量)发送推送通知时出现扩展问题

2024-02-25

我已将所有设备订阅了一个主题,即约100万用户。当设备收到通知时,会有一个调用 REST API 的操作按钮。

现在,如果我向订阅特定主题的所有设备触发通知,所有用户都会收到通知并点击操作按钮,该按钮将调用其余 API 来获取数据。

太多的 REST API 调用会将 CPU 利用率提高到 100%,并且我的服务器停止响应。

有什么方法可以让 FCM 向批量订阅某个主题的所有设备发送通知,以便我的服务器可以处理负载


如果无法批量发送主题通知,可以采取以下解决方案。

1、延迟App端通知的显示时间。

应用程序收到通知后,您可以决定何时向用户显示通知。以这样的方式编写一个逻辑,假设有些用户会在收到通知后立即看到通知,有些用户会在 2 分钟后看到它,有些用户会在 4 分钟后看到它,依此类推。

您可以使用报警管理器 https://developer.android.com/reference/android/app/AlarmManager, Handler https://developer.android.com/reference/android/os/Handler或类似的东西。

2. 创建主题桶

假设您有一个主题sport_news。划分主要话题sport_news into sport_news_1, sport_news_2, sport_news_3等等。实现您自己的逻辑来划分用户。

例如

第 1 天注册的用户将分为sport_news_1

第 2 天注册的用户将分为sport_news_2

等等。

因此,每当您必须向主题发送通知时sport_news然后您将向属于它的所有主题发送通知,在我们的例子中它将是sport_news_1, sport_news_2等等。您可以按一定的时间间隔发送它来处理批次,因为您有服务器端控制来批量发送它。

3. 按一定时间间隔扩展服务器以处理大流量。

在向数百万用户发送通知并知道您将获得高流量后,然后在一定时间内扩展您的服务器以处理大流量(例如 1-2 小时)。

4. 改善获取数据 api 的延迟

知道您会收到太多针对特定获取数据 api 的请求,您可以实现缓存、数据库索引、内存数据存储或任何其他方式来加速获取操作。您只需要找到一种方法以某种方式减少 fetch api 的响应时间,您的服务器将以这种方式提供大量流量,并且 CPU 利用率可能会降低。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 FCM 向订阅主题的所有设备(批量)发送推送通知时出现扩展问题 的相关文章

  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • Android - 从资产中解析巨大(超大)JSON 文件的最佳方法

    我正在尝试从资产文件夹中解析一些巨大的 JSON 文件 我如何加载并添加到 RecyclerView 我想知道解析这种大文件 大约 6MB 的最佳方法是什么 以及您是否知道可以帮助我处理此文件的良好 API 我建议您使用GSON lib h
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 尝试将相机切换回前面但出现异常

    尝试将相机切换回前面 但出现异常 找不到 问题请检查并帮助 error 01 27 11 49 00 376 E AndroidRuntime 30767 java lang RuntimeException Unable to start
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript

随机推荐

  • Excel VBA:获取单击按钮的行[重复]

    这个问题在这里已经有答案了 我正在尝试在 Excel 中创建一个按钮 将特定范围的单元格从活动工作簿复制到另一个工作簿 当我指定固定范围时 该范围的复制工作得很好 但我对如何找出单击的按钮的行感到困惑 每行包含 7 个左右的单元格 第 8
  • 无法获取总金额

    大家好 我已经解决了最初的问题 但现在它无法正确添加 我不确定该怎么做以及我哪里出了问题 任何帮助 将不胜感激 导入java util Scanner 公开课动物园 公共静态无效主 字符串 args int quantity confirm
  • 微调器的文本大小

    如何减小微调器的字体大小 我已将微调器大小减小到 35 像素 因此我的文本被切成两半 我怎么做 我也不希望事先选择任何东西 默认文本应该是 select some value 经过一些测试 有一个比继承 ArrayAdapter 更简单的方
  • 如何在自定义控件中包含光标(插入符号)?

    我被指派用 C 和 Windows 窗体制作自定义网格控件 我不确定的一件事是如何处理显示闪烁的光标 插入符号 以指示单元格编辑正在进行的位置以及将显示下一个字符 有谁知道这是如何使用标准文本框完成的 是否有一个标准框架结构可以为我做到这一
  • 列表理解中的 if/else

    我有一个清单xs包含字符串的混合物和None价值观 如何使用列表理解在每个字符串上调用函数 但将None价值观 而不是将它们传递给函数 I tried f x for x in xs if x is not None else 但它给出了S
  • 阿拉伯标签在 Geoserver 中无法正确显示

    我已随 Tomcat 安装了 geoserver 但文本标签无法正确显示 我在哪里可以设置geosever中的阿拉伯编码 标签在 QGIS 中显示得很好 但是当我将其发布到 geoserver 中时 我遇到了这个问题 1 https i s
  • 在 Bash 中比较两个字符串时出现“找不到命令”错误

    我的整个脚本目前是这样的 bin sh clear blanko Dummy Variablen variable Testvariable if variable blanko then echo Nichts da else echo
  • React setState 不更新状态

    所以我有这个 let total newDealersDeckTotal reduce function a b return a b 0 console log total tittal outputs correct total set
  • 如何增加 Google Cloud Run 中的内存限制?

    我正在使用 Cloud Run Cloud Firestore 构建一个简单的基于 Flask 的应用程序 有一种方法会带来大量数据 并且日志显示此错误 Memory limit of 244M exceeded with 248M use
  • 为什么 Python 装饰器不能跨定义链接?

    为什么以下两个脚本不等效 摘自另一个问题 了解 Python 装饰器 https stackoverflow com questions 739654 understanding python decorators def makebold
  • 在Webpack中构建dist文件夹后,如何将bundle.js和css文件移动到statics文件夹中?

    当我运行我的npm run build or npm run build dev 它在根目录中创建index html manage2 bundle js 和manage2 css 文件 我需要将这些文件移动到静态目录中 因此 下面生成的i
  • 有没有一种简单的方法可以在 Google 云中的项目之间克隆 SQL 实例?

    我想知道是否存在一种简单的方法可以在 Google Cloud 中的项目之间克隆 sql 实例 我知道我可以将数据导出到存储桶 请参阅img 1 但我发现这有点麻烦 如果有人有一个简单的方法来做到这一点 我们将不胜感激 没有 快速 方法可以
  • Pandas:合并数据框而不创建新列

    我有 2 个具有相同列的数据框 df1 pd DataFrame Abe 1 True Ben 2 True Charlie 3 True columns Name Number Other df2 pd DataFrame Derek 4
  • 使用 Python 加载 SQL_VARIANT 数据类型时出错

    我正在使用 Python 2 7 和 SQLAlchemy 0 7 8 来查询我没有创建的数据库 我在查询包含以下内容的表时遇到问题SQL VARIANT数据类型 我收到错误 sqlalchemy exc DBAPIError 错误 ODB
  • Flutter如何检测设备语言?

    我有一个问题 如何检测设备语言 并据此在应用程序最初启动时给出正确的语言 如果可能 请提供带有代码的示例 Calling Localizations localeOf context languageCode应该返回你的语言代码 如果未提供
  • 如果用户在浏览器中禁用了 JavaScript,如何使用不同的 CSS 样式表?

    我正在为某人开发一个网站 我使用的 CSS 样式需要 JavaScript 用于小屏幕上下拉导航栏的按钮 如果用户启用了 JavaScript 我如何使用一种样式表 如果用户禁用 JavaScript 我如何使用另一种样式表 有两种方法可以
  • 如何以良好的方式使用 SQL NULL 值和 JSON?

    Go 类型如Int64 and String不能存储空值 所以我发现我可以使用sql NullInt64 https golang org pkg database sql NullInt64 and sql NullString http
  • 在发布模式下未针对异步方法调用 IDisposable.Dispose()

    我在 VS2015 1 上使用 NET 4 6 1 在 VB NET 14 中编写了以下 WPF 示例应用程序 Class MainWindow Public Sub New InitializeComponent End Sub Priv
  • 除法结果不正确

    我有一个时间计算器 多年来一直运行良好 然而 一直困扰我的一件事是 如果使用小数秒 结果将成为浮点 错误 的牺牲品 所以 我最近改用这个 BigDecimal 库 https github com dtrebbien BigDecimal
  • 使用 FCM 向订阅主题的所有设备(批量)发送推送通知时出现扩展问题

    我已将所有设备订阅了一个主题 即约100万用户 当设备收到通知时 会有一个调用 REST API 的操作按钮 现在 如果我向订阅特定主题的所有设备触发通知 所有用户都会收到通知并点击操作按钮 该按钮将调用其余 API 来获取数据 太多的 R