检查 Firebase 注册令牌是否无效

2023-12-12

我有一个应用程序,用户可以通过 Firebase 注册/登录。用户可以拥有多个设备,在这些设备之间共享他的所有数据(当然他必须登录)。我通过 Firebase 设备令牌跟踪所有设备,并在用户在特定设备上更新某些内容时发送适当的更新通知

现在我知道 firebase 令牌正在刷新,但我如何知道令牌无效?假设一名用户拥有 4 台设备,并使用一个帐户登录。现在,他删除了其中一个应用程序,然后再次安装,因此他获得了一个新令牌。这意味着现在我的服务器上有 5 个设备令牌,但仍然只有 4 个设备。最好的方法是将令牌与某些不可更改的设备 ID(例如 MAC 或 IMEI)绑定,但由于隐私政策,这是不可能的。 是否有其他方法可以捞出已被撤销/失效的代币?


检测过期/撤销的 FCM 令牌的常见方法是在发送消息期间。此时,FCM 将准确告诉您哪些令牌已过期,然后您可以将它们从数据库中删除。

有关此示例,请参阅以下 Node.js 代码:函数样本存储库:

 tokens = Object.keys(tokensSnapshot.val());
 // Send notifications to all tokens.
 const response = await admin.messaging().sendToDevice(tokens, payload);
 // For each message check if there was an error.
 const tokensToRemove = [];
 response.results.forEach((result, index) => {
   const error = result.error;
   if (error) {
     console.error('Failure sending notification to', tokens[index], error);
     // Cleanup the tokens who are not registered anymore.
     if (error.code === 'messaging/invalid-registration-token' ||
         error.code === 'messaging/registration-token-not-registered') {
       tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
     }
   }
 });
 return Promise.all(tokensToRemove);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 Firebase 注册令牌是否无效 的相关文章

  • 与其他图标相比,AppCompat ShareActionProvider 图标太大

    我将 ActionBarSherlock 更改为 AppCompat v7 我已经完成了使其工作所需的所有更改 但是共享图标 使用 ShareActionProvider 发生了一些奇怪的情况 与其他图标相比 共享图标太大 我还使用支持库进
  • 使用库来维护免费/付费的应用程序版本

    维护免费 付费应用程序版本的共识似乎是使用库 并从每个活动中设置一个标志 以从代码库中获取不同的功能 这有多安全 据我了解 一个人可以root他们的手机 获取APK 并且可以对其进行反编译 即使代码被混淆 也不难看出该应用程序是带有标志的包
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • GridView 中多次调用 getView()

    我的 Activity 由包含 40 多个元素的 GridView 组成 开始活动后 用户最多可以看到 15 个项目 3 行 每行 5 个项目 我在 getView 正文中编写传递给获取 View 的 LogCat 编号 Log i get
  • android webview 函数 onPagefinished 被调用两次

    我的android webview功能onPageFinished被调用两次 我不知道为什么 但它在 android 2 2 上运行良好 但当我将其升级到 4 时 它就不起作用了 代码附在下面 Code Override public vo
  • ProGuard 无法与 Windows 中使用的 Joda Time 一起编译

    实际上 这是一个答案 而不是一个问题 我确实在 Windows 上花了很多时间 使用 JodaTime 并使用 ProGuard 将其包含在我的 Android 项目中 混淆器配置 libraryjars C Users Reto Docu
  • Android 应用被 Google Play 拒绝

    我最近向 Google Play 商店提交了一个 Android 应用程序 但收到一条消息说我的应用程序已被拒绝 我不确定问题是什么 也找不到确切的解决方案 拒绝原因 违反了禁止行为条款 内容政策 经过定期审核后 我们确定您的应用程序支持
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 如何防止布局的方向改变,而不是整个屏幕/活动的方向改变

    我需要一个子布局 可以是任何布局 例如FrameLayout or RelativeLayout 忽略方向变化并始终保持横向 但不是它的父级或任何其他兄弟布局 视图 它们应该相应地改变它们的方向 因此 我不能使用setRequestedOr
  • finish() 完成活动但它仍然在后台

    我有一个关于 android studio 中活动的 finish 方法的问题 我有这个简单的代码 public class MainActivity extends AppCompatActivity Override protected
  • BottomSheetDialog get Behavour 始终返回 null

    我与底部表单对话框我必须获得行为才能设置setBottomSheetCallback 来处理一些事情 As 谷歌说 https android developers googleblog com 2016 02 android suppor
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • onBackPressed 隐藏 不破坏 Activity

    我知道如何取消后退按键 以便活动 主窗口保持可见 public void onBackPressed return 我的目标是隐藏该活动 但是 在没有完成它的情况下 您如何在 onBackPressed 事件中做到这一点 即我想达到 onP
  • NoClassDefFoundError:无法解析:Landroid/support/v7/appcompat/R$styleable

    新手尝试完成 Google 提供的我的第一个应用程序教程 在这个致命异常的过程中 我确实导入了很多随机包来消除许多事情的 无法解析 错误 例如 ActionBarActivity EditText Fragment LayoutInflat
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • 葡萄牙/西班牙口音与 jsPDF

    如何在使用 jsPDF 生成的 PDF 文件中获取特殊字符 文本通过 AJAX 动态加载 一些可能的字符是 and 到目前为止 我还不知道如何做到这一点 你必须下载最新版本的 jsPDF 会有一个名为 jspdf plugin standa
  • 无法从 JSP 访问 WEB-INF 下定义的 CSS 文件

    我使用 Maven 创建了 Struts2 应用程序 在此应用程序中 我创建了两个命名空间 第一个是tc第二个是cmpui 我正在尝试从 JSP 页面访问 css文件 但它给了我 404 错误 JSP页面的位置是 webapp tc lay
  • 从 golang 中的字节数组中解压缩 gzip

    我有一堆来自一些网络请求的文件 其中一些是 gzip 压缩的 我需要解压它们并将它们打印为字符串 这是我第一次尝试使用 golang 我尝试了一些在网上找到的示例 但无法正常工作 这是我尝试的最后一个测试 package main impo
  • 如何在 Spotify 应用程序 API 中创建类似“轮播”的小部件?

    Is it possible using the spotify apps API to create one of these widgets filled with my data of choice 是的 通过使用 import sc
  • WCF - 无需 app.config 即可使用

    我有一个调用 WCF 服务的 SharePoint 工作流 只要工作流在 IIS 下运行并且不转移到计时器服务 这种方法就可以正常工作 问题是计时器服务无法访问从计时器服务上下文设置 WCF 连接所需的 web config 设置 Coul
  • 有什么办法可以直接进入Android中的“启用USB调试”页面吗?

    是否有直接进入 启用 USB 调试 切换的 Intent 或请求启用它的方法 情况说明 我们有一个应用程序 用于同时在多部手机上进行测试 并且它们都启用了开发人员模式 不过全部刷新后需要开启usb调试 我们知道如何通过 ADB 执行此操作
  • 使用 keras 可以在训练过程中实时获取输出层吗?

    我尝试在训练期间获得输出层 我正在尝试对模型进行实时 3D 可视化并使其具有交互性 我正在使用谷歌colab与tensorflow 2 0和python 3 这是我的代码 Imports from future import absolut
  • 如何使用 Social-auth-app-django 刷新令牌?

    I use Python 社交身份验证 Django登录我的用户 我的后端是微软 所以我可以使用微软图谱但我认为这不相关 Python Social Auth 处理身份验证 但现在我想调用 API 为此 我需要一个有效的访问令牌 继用例我可
  • 使用 p2 查询语言在 p2 存储库中查找单元的命令行

    p2 有一个查询语言允许对 p2 存储库的内容运行查询 然而 所有的例子文档假设查询语言是在 Java 内部使用的 例如 IQuery
  • 覆盖静态字段

    我正在为我的游戏编写 C 游戏引擎 但遇到了问题 我需要为每种不同类型的块执行 XNA Rectangle drawRectangle 块存储在块列表中 因此必须重写该属性 以便可以通过绘制访问而无需进行大量投射 我尝试了很多方法 但没有一
  • 当 fastcgi 后端偶尔使用内容编码进行 gzip 服务时,如何禁用 Nginx 双 gzip 编码?

    如果后端已经设置了 content encoding 标头 是否有任何聪明的方法可以欺骗 nginx 停止 gzip Nginx 配置为对 php fastcgi 后端的输出进行 gzip 压缩 这在 99 的情况下都很有效 除了极少数情况
  • Xamarin Forms:隐藏 ListView 中的滚动条

    有没有一种简单的方法可以隐藏 ListView 中的滚动条 但仍使其可滚动 您可以为每个平台制作自定义 ListView 渲染器 http developer xamarin com guides cross platform xamari
  • 如何识别弹出窗口之外的点击?

    我有一个弹出窗口 在单击内部时消失 但我的目的是使其在单击外部时消失 目前 弹出窗口工作正常 但每当我在窗口内单击时它就会消失 当我在窗口外单击时 它会保留下来 我如何让它以相反的方式工作 Code as function deselect
  • 为什么受影响的行在更新/删除成功时返回 0?

    我有以下声明 INSERT INTO infotbl name phone VALUES Alex 9999999 并更新它 UPDATE infotbl SET name Alex Johnes phone 999 34356063 WH
  • Safari 扩展 safari.application 错误

    我正在为 safari 进行扩展 我使用 command 创建了一个上下文项showNote 在调试器中我收到以下错误TypeError Result of expression safari application undefined i
  • GDI+:如何在后台线程上将 Graphics 对象渲染为位图?

    我想使用 GDI 在后台线程上渲染图像 我发现这个例子关于如何使用 GDI 旋转图像 这是我想做的操作 private void RotationMenu Click object sender System EventArgs e Gra
  • WPBakery 自定义容器不工作

    我正在创建自定义内容块并使用 WPBakery 插件来执行此操作 但嵌套容器不起作用 当我添加容器时 我无法将其删除 并且子项目根本不显示 该图标也与示例中显示的图标不同 它显示带有鼠标指针的正方形 我错过了什么吗 我遵循的例子是这样的 h
  • 格式化 Invoke-RestMethod 或 ConvertFrom-Json 返回的 [pscustomobject] 实例

    我正在尝试从 RESTful API 接收的 JSON 文件创建一个表 当我打印 json 对象的属性时 我得到如下输出 PS gt Write Output JSON Object Object1 key1 property key2 p
  • 如何仅返回真值作为映射操作的结果

    我有一个函数可以返回元音 但是我只想返回真值 我该怎么做 map a e i o u seq char array Hello gt nil e nil nil o filter identity map f keep f gt keep
  • 检查 Firebase 注册令牌是否无效

    我有一个应用程序 用户可以通过 Firebase 注册 登录 用户可以拥有多个设备 在这些设备之间共享他的所有数据 当然他必须登录 我通过 Firebase 设备令牌跟踪所有设备 并在用户在特定设备上更新某些内容时发送适当的更新通知 现在我