0

我已将 Firebase 设置为向我的应用用户发送推送通知。但是,我不确定关于用户间通信的最佳做法是什么,例如聊天客户端。我应该在每次启动应用程序时获取设备令牌并将其用于发送,还是应该为双方都需要订阅的每个“聊天室”创建一个新主题?例如在接受聊天请求时。

如果第一个选项是最好的,这是如何工作的?如果在应用启动时为设备分配了新令牌,我如何确定给定 ID 指向特定设备?整个概念似乎很脆弱 - 但有人可以指导我找到最有效的解决方案吗?

我只想通过推送发送聊天消息/聊天邀请

4

1 回答 1

2

根据聊天室的大小和隐私,您可以选择使用:

  • 为大型团体制作的主题,并且没有加入/离开的保护
  • 您需要存储在服务器实现中的设备令牌。
    从好的方面来说,它们允许您控制接收消息的人,并将消息发送到单个设备。

设备令牌不会在每次启动时更改。它是在应用程序第一次启动时创建的,在特殊情况下可以更新。当令牌更改时(同样,这种情况很少见),FirebaseInstanceIdService.onTokenRefresh()回调被调用。

在通用聊天应用程序中,您可能希望:

  1. 首先使用您的登录系统对用户进行身份验证
  2. 将映射用户 ID > 设备令牌上传到您的服务器
  3. 通过 FCM 服务器端 API 向用户发送消息。

更新以解决评论之一:

  1. 服务器端 API 允许在同一个 HTTP 请求中向多个令牌发送相同的消息。参阅registration_idshttps://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json
  2. 您不应该在客户端使用服务器端 API,因为这需要您在应用程序中添加 API-KEY,这是一个安全问题(人们可以反编译应用程序并读取密钥)
  3. 存储结构由您决定。对于 user-id > multiple-device-tokens,字典可以工作。
  4. 如果令牌不可重复使用。因此向过期令牌发送消息是安全的。
  5. 令牌生成需要互联网连接,因此可能需要一些时间。
  6. 要在用户注册后处理令牌,请参阅以下问题: How to launch FCM ID Service only after a specific activity is triggered?
于 2016-05-31T17:44:39.200 回答