Ios 具有Firebase版本3的APN

Ios 具有Firebase版本3的APN,ios,firebase,firebase-cloud-messaging,Ios,Firebase,Firebase Cloud Messaging,我已设置Firebase向我的应用程序用户发送推送通知。然而,我不确定什么是用户对用户通信的最佳实践,比如聊天客户端。我应该在每次启动应用程序时获取设备令牌并将其用于发送,还是应该为双方都需要订阅的每个“聊天室”创建一个新主题?例如,在接受聊天请求时 如果第一个选项是最好的,那么它是如何工作的?如果在应用程序启动时为设备分配了新令牌,我如何确保给定的ID指向特定设备?整个概念似乎很脆弱,但有人能指导我找到最有效的解决方案吗 我只希望通过推送发送聊天信息/聊天邀请,具体取决于聊天室的大小和隐私,您

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

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


我只希望通过推送发送聊天信息/聊天邀请,具体取决于聊天室的大小和隐私,您可以选择使用:

  • 主题专为大型群体设计,加入/离开时不受保护
  • 需要存储在服务器实现中的设备令牌。
    从好的方面来说,它们允许您控制接收消息的用户 消息,并将消息发送到单个设备
设备令牌不会每次启动都更改。 它是在应用程序首次启动时创建的,在特殊情况下可以更新。当令牌发生更改时(同样,这种情况很少见),调用
FirebaseInstanceIdService.onTokenRefresh()
回调

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

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

  • 更新以解决其中一条评论:

  • 服务器端API允许在同一HTTP请求中向多个令牌发送相同的消息。请参见中的
    注册\u id
  • 您不应该在客户端使用服务器端API,因为这需要您在应用程序中添加API-KEY,这是一个安全问题(人们可以反编译应用程序并读取密钥)
  • 存储结构由您决定。对于用户id>多个设备令牌,字典可以工作
  • 如果令牌不可重用。因此,向过期令牌发送消息是安全的
  • 令牌生成需要internet连接,因此可能需要一些时间
  • 要在用户注册后处理令牌,请参见以下问题:

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

    • 主题专为大型群体设计,加入/离开时不受保护
    • 需要存储在服务器实现中的设备令牌。
      从好的方面来说,它们允许您控制接收消息的用户 消息,并将消息发送到单个设备
    设备令牌不会每次启动都更改。 它是在应用程序首次启动时创建的,在特殊情况下可以更新。当令牌发生更改时(同样,这种情况很少见),调用
    FirebaseInstanceIdService.onTokenRefresh()
    回调

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

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

  • 更新以解决其中一条评论:

  • 服务器端API允许在同一HTTP请求中向多个令牌发送相同的消息。请参见中的
    注册\u id
  • 您不应该在客户端使用服务器端API,因为这需要您在应用程序中添加API-KEY,这是一个安全问题(人们可以反编译应用程序并读取密钥)
  • 存储结构由您决定。对于用户id>多个设备令牌,字典可以工作
  • 如果令牌不可重用。因此,向过期令牌发送消息是安全的
  • 令牌生成需要internet连接,因此可能需要一些时间
  • 要在用户注册后处理令牌,请参见以下问题:

  • 我明白了,这消除了一些混淆,即设备令牌不会更改,而是在启动期间生成一次。目前我有一个节点
    users/
    ,我可以将令牌存储在那里。例如,像
    users//device\u token
    听起来不错。请记住,一个userid可以有多个设备(以及多个令牌)。PS:如果这涵盖了您的问题,请接受答案,将问题标记为已回答。我可以使用iOS SDK向多个令牌发送单个通知吗?如果是这样,我应该将令牌存储为字典?如果令牌发生更改,并且您未能相应地更新数据库,则向该令牌发送私有通知是否有危险?或者是唯一的、不可重用的密钥?这个令牌是即时生成的吗?或者它是否依赖于网络连接或类似连接?因为我不完全确定如何处理数据库更新逻辑,如果令牌可以在初始用户注册之前和之后生成。使用令牌作为有关允许字符的密钥是否安全?请更深入地解释数字2。确定:要以编程方式发送消息,需要使用服务器端API。此API要求服务器使用API-KEY进行身份验证,该API-KEY可被视为发送消息所需的“密码”。您应该仅在云服务器中使用此api和此api密钥/密码。如果您试图从客户端使用服务器端api,则需要在应用程序中以clear(清除)的形式写入密码,每个人都可以使用应用程序反编译器找到密码。我明白了,这消除了一些混淆,即设备令牌不会更改,而是在启动期间生成一次。目前我有一个节点
    users/
    ,我可以将令牌存储在那里。例如像
    users//device\u-tok