Firebase - 在不知道其成员的注册 ID 的情况下删除设备组

2024-04-13

在使用 Firebase 和设备组时,我正在测试令牌(注册 ID)发生更改的情况(例如重新安装应用程序后),但我的逻辑失败了,因为重新安装应用程序后我无法再知道以前存储的令牌。

问题是现在我有一个设备组有两个"ghost"我不再知道的注册 ID 因为它们发生了变化。

我知道在每个成员注销后该组就会被删除,但我不知道手动注销它们的注册 ID。

我能做些什么?

有没有办法检索设备组的成员或立即删除它?

另外,管理令牌刷新情况的好方法是什么?


我知道在每个成员注销后该组就会被删除,但我不知道手动注销它们的注册 ID。我能做些什么?

当您向设备组发送消息时,您将收到包含以下内容的响应:success and failure参数。0`failure 的值意味着我们在 FCM 服务器中正确排队的消息。

如果有失败的消息,失败的注册令牌列表将出现在响应中,其中建议重试发送消息。参考docs https://firebase.google.com/docs/cloud-messaging/android/device-group#sending_downstream_messages_to_device_groups:

向设备组发送下游消息

向设备组发送消息与向单个设备发送消息非常相似。将 to 参数设置为设备组的唯一通知键。看消息类型 https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages有关负载支持的详细信息。本页中的示例显示如何使用 HTTP 和 XMPP 协议向设备组发送数据消息。

HTTP POST 请求

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

HTTP响应

这是一个“成功”的例子——notification_key有 2 个与之关联的注册令牌,并且消息已成功发送给它们:

{
  "success": 2,
  "failure": 0
}

这是一个“部分成功”的例子——notification_key有 3 个与之关联的注册令牌。该消息已成功发送至仅 1 个注册令牌。响应消息列出了未能接收消息的注册令牌:

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

当消息无法传递到与某个关联的一个或多个注册令牌时notification_key,应用程序服务器应在重试之间进行退避重试。

但是,在执行重试之前,您可以先验证 FCM 令牌是否仍然有效 https://stackoverflow.com/q/41552610/4625829(通过使用dry_run或实例 ID 服务器 API)。如果显示该设备不再有效(通常NotRegistered https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes,然后您应该从设备组和应用程序服务器中删除该令牌(或将其移至垃圾箱日志或其他位置)。

另外,管理令牌刷新情况的好方法是什么?

如果令牌被刷新(通过onTokenRefresh()),要做的事情是找到用户拥有的旧令牌并将其替换为新令牌,在重要的地方应用更改(这也是映射设备组)。

另请参阅我的回答here https://stackoverflow.com/a/42522002/4625829 and here https://stackoverflow.com/a/42248240/4625829。一些细节可能会有所帮助。

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

Firebase - 在不知道其成员的注册 ID 的情况下删除设备组 的相关文章

  • 使用 GoogleServices 插件时忽略 Gradle ArchivesBaseName

    我经常使用 archivesbasename 来重命名我的输出 apk 但自从使用 google services 插件后 它就被忽略了 我能做些什么来让它再次工作吗 下面附上了我完整的 build gradle 感谢您的指点 apply
  • Android向后兼容技术

    我现在在开发基于最新 API 15 ICS 的 15 项活动 Android 应用程序方面取得了进展 现在我发现应用程序的主要功能主义者即使支持 android v4 也不向后兼容 例如 1 fragment事务动画 2 将StringSe
  • 毕加索磁盘缓存

    我正在使用 Picasso 从 URL 加载图像 Picasso with getApplicationContext load product getImageUrl into imageView 据我所知 每次都会访问该网址 而不是缓存
  • 如何将 Android Instrumentation 测试推送到模拟器/设备?

    我正在尝试使用 Ubuntu 9 04 中的命令行 shell 在 Android 模拟器上运行 Webkit 布局测试 adb s emulator 5554 shell am instrument w com android dumpr
  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略

    我有一个包含项目列表的 FragmentActivity 当应用程序处于后台时 可以推送该项目列表 发生这种情况时 我想创建一个状态栏通知并提醒用户更新 当用户单击通知时 活动应重新排序到前面并显示在屏幕上 同时在列表底部显示新项目 所以我
  • 在浏览器中打开 URL,即使我的应用程序为其注册了意图过滤器

    我的应用程序为某些 URL 注册了一个意图过滤器 因为它可以处理来自这些 URL 的数据 但是 在应用程序内部 我想提供一个按钮来在浏览器中打开这样的 URL 也就是说 如果设置了默认浏览器 则在默认浏览器中打开它 否则提供一个选择器 就像
  • 多语言 Android 应用程序:在电子邮件和密码字段中显示英文键盘

    我们正在开发一款多语言 Android 应用程序 针对英语和阿拉伯语 面临的问题是在登录和注册屏幕中 我们希望仅以英文文本输入用户名和密码字段 从而显示英文键盘 无论设备区域设置语言如何 已尝试在 edittext 中设置 inputtyp
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • Android Drawable 绘图性能?

    在我看来 我有一个简单的 ARGB 可绘制对象 大约需要 2 毫秒才能绘制 但我可以在 0 5 毫秒内绘制与位图相同的文件 只是一些快速代码 我真的不能认为它是一个选项 优化可绘制对象的绘制速度的最佳方法是什么 这取决于可绘制的数量以及每个
  • 使用后退按钮启动 Activity

    我正在 Android 中开发一个应用程序 我正在寻找解决方案 有一个活动 例如 A1 通过单击按钮 用户可以转到另一个活动 例如 A2 现在 一旦用户完成 A2 活动 他就会单击后退按钮 返回到上一个活动 A1 这是众所周知的事实 A1此
  • 无法登录 Google Play 游戏服务

    我在开发者控制台上使用包名称和正确的签名证书设置了我的游戏 并为其创建了排行榜 但没有创建任何成就 然后 我从以下位置下载了示例 Type A Number Challenge 和 BaseGameUtils https developer
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • 如何通过 AppCompatActivity 使用 YouTube Android 播放器 API

    为了在我的应用程序中播放视频 我决定扩展 YouTube Android Player API 但问题是我的菜单消失了 因为我没有从 AppCompatActivity 扩展 问题是 如何使用 YouTube Android Player
  • 使用 RecyclerView.Adapter 在 onBindViewHolder() 内设置 onItemClickListener

    我有一个自定义对象 学生班 public class Student private String name private String age public String getName return name public void
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles

随机推荐

  • 在 Swift 中改变函数参数

    在 Swift 中 是否有可能在该函数的作用域内改变作为参数传递给函数的变量所指向的值 func exampleFunction value String index Int gt Bool value Changed Value Erro
  • Angular 4使用反应形式在数组内创建动态formArray

    在这里 我们在数组内动态创建数组 下面是预期结果的示例结构 optionsRadios null Package Title null HotelData Htitle HDescription hotelStar RoomData Hot
  • 通过 Excel VBA 发送带附件的电子邮件

    我想通过 Outlook 从 Excel 通过电子邮件发送报告 我正在使用我自己和同事的电子邮件地址对此进行测试 我收到 无法送达 的消息Error 该消息表示无法联系到收件人 并建议稍后尝试发送电子邮件 Sub CreateEmail D
  • 将 std::string 传递给函数 f(**char)

    是否可以将 std string 的指针传递给需要 char 的函数 该函数需要一个 char 才能向其写入值 目前我正在做以下事情 char s1 f s1 std string s2 s1 难道就没有更短的路吗 很明显 s2 c str
  • org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到身份验证对象

    我在以下环境中有一个网络应用程序 春季3 2 2 春季安全3 2 0 JPA 2 0 JSF 2 1 9 我已将以下与 Spring 安全相关的库添加到类路径中 spring security core 3 2 0 M1 jar sprin
  • 如何找到只安装了facebook应用的好友? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在 Facebook 上使用一个应用程序 我想找出仅包含在 Facebook 上安装相同应用程序的朋友的列表 而不是整个朋友列表 我正在
  • 嵌套字典理解python

    我无法理解 Python 3 中的嵌套字典推导式 我从下面的示例中得到的结果输出了正确的结构 没有错误 但只包含内部键 值对之一 我还没有找到像这样的嵌套字典理解的例子 谷歌搜索 嵌套字典理解 python 显示遗留示例 非嵌套理解或使用不
  • 如何长按主页、后退或最近使用的应用程序按钮打开我的 Android 应用程序?

    我希望我的用户能够通过长按后退按钮 最近使用的应用程序按钮或主页按钮来启动我的应用程序 或者甚至长按音量增大 减小或电源按钮 这将允许用户在不触摸屏幕图标的情况下执行我的应用程序 顺便说一句 我提供了与 Google Now 类似的语音解决
  • 将值从一个 jsp 页面传递到另一个 jsp 页面

    我正在将值从数据库检索到 jsp 中的表 到列 我想将该值插入到数据库中的另一个表中 为此 我使用另一个 jsp 表将该值插入到数据库中 并在之前的 jsp 页面表单操作选项卡中调用该 jsp 页面 I use request getPar
  • 时间:2019-03-14 标签:c++

    我正在编写一个 C 应用程序 我有一个类变量 多个线程正在写入该变量 在 C 中 任何可以在编译器 意识到 正在更改的情况下进行修改的内容都需要标记为易失性 对吧 因此 如果我的代码是多线程的 并且一个线程可能写入 var 而另一个线程从中
  • Swift 的标准库和名称冲突

    我知道 Swift 不使用命名空间 但名称是在每个模块中定义的 首先 我不太明白这是如何避免名称冲突的 请随意详细说明 尽管如此 我的主要问题是 假设我想要一个不使用 NSTreeNode 的树结构 所以我创建了自己的类 名为 TreeNo
  • Op 类型未在二进制中注册“SentencepieceEncodeSparse”

    我部署了一个模型 该模型使用 tfhub 模型来使用 docker 进行张量流服务 这是我的模型中包含的 tfhub 模型 https tfhub dev google universal sentence encoder multilin
  • DropboxAPI 入门,未找到类

    我第一次尝试使用 Dropbox API 但在启动应用程序时遇到此错误 Caused by java lang NoClassDefFoundError com dropbox client2 session Session AccessT
  • 异步任务中的异常在 Visual Studio 中被拦截

    我想运行多个任务 其中一些任务可以完成异步 然后等待所有任务完成 由于任务可能会引发异常 因此我想捕获并记录它们 sample code for that static async Task doit int x try Console W
  • 具有条件选择动作的剑道网格列

    这是我得到的 columns Bound t gt t Id Title Template
  • 处理 execvp 的参数数组?

    当我打电话时execvp 例如execvp echo b 其中 b 是命令 a 的参数数组 稍后更改该数组是否会影响之前进行的 execvp 调用 当我尝试调用 execp echo b 时 它最终打印出 null 而不是 b 内部的内容
  • Fetch API:从http响应中获取标题、关键字和正文

    我想知道使用 fetch api 有没有办法在同源发出 XMLHttpRequest 时不发送 cookie https stackoverflow com questions 9028234 is there a way to not s
  • 两指或小指缩放至 osmdroid 中的地图视图

    我需要帮助我正在尝试通过让用户多触摸点 首先是 2 根手指触摸 来缩放地图视图 我知道有 setMultiTouchControls 函数 但这不是我想要做的 我尝试用图片来解释 这比写作更容易 黑色粗体箭头表示手指的移动方向 相反方向也可
  • 如何停止已部署的 docker 堆栈?

    我刚刚完成了初学者 Docker 教程 https github com docker labs blob master beginner chapters votingapp md并想知道如何清理 我使用以下命令部署了一个堆栈和一些不同的
  • Firebase - 在不知道其成员的注册 ID 的情况下删除设备组

    在使用 Firebase 和设备组时 我正在测试令牌 注册 ID 发生更改的情况 例如重新安装应用程序后 但我的逻辑失败了 因为重新安装应用程序后我无法再知道以前存储的令牌 问题是现在我有一个设备组有两个 ghost 我不再知道的注册 ID