我正在尝试使用云函数以编程方式向 iOS 应用程序发送推送通知。为此,我需要获取目标用户 FCM 令牌。
我的想法是在实时数据库中存储用户电子邮件及其FCM令牌的字典。这样,每当 Cloud Functions 需要向用户发送推送通知时,它都可以查找当前令牌。
但是,在查看文档时,我注意到Firebase是这样说的:
FCM 开发工具包为每个客户端应用实例生成的 ID。对于单个设备和设备组消息传递是必需的。请注意,注册令牌必须保密。
如果 FCM 令牌需要保密,那么我应该如何以编程方式从 Cloud Functions 发送推送通知?还是存储在数据库中就足够"秘密"了?
将令牌存储在Firebase DB上应该足够安全(我认为文档需要对此重新措辞(。确保您计划保存注册令牌的节点已使用 Firebase 规则得到妥善保护,仅允许相应的用户读取这些令牌。但是,由于您正在使用云函数来读取它们,因此您应该没问题。
无论如何,将其存储在DB/服务器端的任何数据库中都应该受到保护。
目标是不让代币"公开"供所有人获取,否则有人可以窃取它?和虐待。
就我而言,每次用户登录应用程序时,我都能将他们的用户名/标识该用户的user_id与收到的客户端设备令牌相匹配。
例如,在获取令牌并记录用户后,我将 POST 发送到我的服务器,其中包含该用户的令牌。注销时,我将发布/删除到想要停用/删除该令牌链接的服务器。
此外,设备令牌可能会过期并更改,因此每次客户端具有令牌时,我都会再次将其添加到数据库中。因此,最终后端将具有每个user_id的令牌列表。并发送到与要通知的用户匹配的每个设备令牌。
在该后端过程中,如果调用FCM服务的结果返回错误"未注册",那么我确定设备令牌无效/已过期,我可以安全地将其从数据库中删除。我认为这是一个很好的方法。