如何使用FCM为Flutter应用设置推送通知+相关权限存储?

问题描述 投票:0回答:1

我对 Flutter 中的 FCM 和推送通知有点陌生,所以我目前正在考虑以下设置,但我遇到了 3 个最后问题。

当前设置:

  • 我有一个
    users
    的数据库表,让我们保持简单,假设由
    ID
    name
    组成。
  • 我创建了第二个数据库表,将
    users.ID
    作为 FK 映射到第二个表的
    uid
    字段,另外还有字段
    ID
    (代理 PK)、
    device_token
    is_active
    (布尔)。

对第二个数据库表的思考:

据我了解,FCM 使用的设备令牌是特定于每个应用程序安装+设备的。意味着卸载应用程序并重新安装它,然后调用

FirebaseMessaging.instance.getToken()
将生成并从
FCM
获取新的设备令牌。正确吗?

因此,我的想法是我必须:

A) 能够同时跟踪每个用户的多个设备令牌。

B) 能够知道哪些设备令牌是活动设备,以避免向不再使用/甚至不再存在的设备发送推送通知。

完成上述第二个表,A)就完成了。但我不知道如何优化B);当设备令牌变为非活动状态时,我应该如何注意到?我首先想到的是在添加新用户时停用用户的所有设备令牌,方法是将相关用户记录的第二个表的

is_active
字段设置为
0
。但很可能用户在智能手机和平板电脑上都使用应用程序,并授予在两者上接收推送通知的权限。对应两个活跃设备。

然后我开始阅读有关权限的内容,令我困惑的是它们与设备令牌无关?据我了解,设备令牌是通过

FirebaseMessaging.instance.getToken()
获取的(如果请求的应用程序+设备不存在则生成),通过
FirebaseMessaging.instance.requestPermission()
授予权限。因此,我们实际上在调用
FirebaseMessaging.instance.getToken()
时总是会获得设备令牌,并且我们始终可以向获得的设备令牌发送推送通知。但是,如果之前已通过
FirebaseMessaging.instance.requestPermission()
触发的弹出窗口授予权限,它只会显示在相关设备上。这是正确的吗?

因此,我的问题是:

  1. 检查客户端(移动应用程序用户)授予的权限是否必须在客户端而不是服务器端执行,使用:
FirebaseMessaging messaging = FirebaseMessaging.instance;

NotificationSettings settings = await messaging.requestPermission(
  alert: true,
  badge: true,
  sound: true,
  provisional: false,
);

并检查是否

settings.authorizationStatus == AuthorizationStatus.authorized
,这意味着它已被授予,在这种情况下,上面的
requestPermission
调用不会触发弹出窗口,对吗?

  1. 用于检查不再活动的设备令牌的“垃圾收集”的标准做法是什么?我看到的唯一方法是仅将设备令牌存储在您自己的服务器数据库中,供授予权限的移动应用程序用户使用?当他们撤销权限时,您将自己服务器数据库中相关设备令牌的

    is_active
    字段设置为
    0
    吗?或者我在这里遗漏了什么?

  2. 我读到 Firebase 自动轮换设备令牌,有点像使用访问密钥。我完全不明白你为什么要这样做,这让我很困惑,如果设备令牌是在 firebase 中生成/旋转,但存储在我自己的服务器上,我应该如何跟踪设备令牌旋转?在我的服务器上配置某种侦听器来侦听 Firebase 的设备令牌轮换,并每次都通过全表扫描来扫描我的整个数据库以查找相关设备令牌,这样的事情对我来说听起来像是一场噩梦?这种轮换是否可以以某种方式关闭,因为我认为它没有任何好处,因为身份验证无论如何都是通过不同的身份验证密钥、令牌和证书进行的?

flutter firebase push-notification firebase-cloud-messaging
1个回答
0
投票

我做了更多的研究,我想 thisthis 的组合几乎回答了我问题的各个方面。

© www.soinside.com 2019 - 2024. All rights reserved.