【问题标题】:FCM TOPIC Creation in APP ServerAPP Server中的FCM TOPIC创建
【发布时间】:2017-03-09 11:32:02
【问题描述】:

最近我从 GCM 迁移到 FCM 以通过我的应用程序发送通知,我想知道是否可以从我的应用程序服务器订阅特定主题的成员。如果可能,那么如何查明特定成员令牌是否有效或过期。

因为在我的数据库中,我有近 22L 人 GCM Registration TOKEN id,所以我将创建一个主题并通过我的应用服务器订阅这些成员。

解决此类问题的任何想法。

【问题讨论】:

  • 目前我们正在做的意思是,我们通过单独使用 register_id ( GCM Token Id ) 发送通知,如果会在 gcm 中得到未注册的错误,那么我们将从 db.xml 中删除该条目。如果我们要使用 TOPIC 概念,将如何处理它。如果已订阅该主题的任何一个注册 ID 失败或在内部出现相同的错误。将如何处理?
  • 怎么样?你能调查一下吗?

标签: android firebase push-notification google-cloud-messaging firebase-cloud-messaging


【解决方案1】:

您可以使用Instance ID API,特别是使用batchAdd,通过您的应用服务器将多个令牌订阅到主题。它还可以通过返回NOT_FOUND 错误来识别您订阅的注册令牌是否无效。来自文档:

管理多个应用实例的关系图

使用 Instance ID 服务的批处理方法,您可以对应用实例进行批处理管理。例如,您可以将应用程序实例批量添加或删除到 FCM 或 GCM 主题。要管理应用实例,请在此端点调用实例 ID 服务,并在 JSON 正文中提供应用实例令牌:

https://iid.googleapis.com/iid/v1:batchAdd

https://iid.googleapis.com/iid/v1:batchRemove

参数

  • 授权:key=YOUR_API_KEY。在标头中设置此参数。
  • to :主题名称。
  • registration_tokens :您要添加或删除的应用实例的 IID 令牌数组。

结果

调用成功时返回 HTTP 状态 200。空结果表示成功订阅令牌。对于失败的订阅,结果包含以下错误代码之一:

  • NOT_FOUND — 注册令牌已被删除或应用已被卸载。
  • INVALID_ARGUMENT — 提供的注册令牌对于发件人 ID 无效。
  • 内部 — 后端服务器因未知原因失败。重试请求。
  • TOO_MANY_TOPICS — 每个应用实例的主题数量过多。

POST 请求示例

https://iid.googleapis.com/iid/v1:batchAdd
Content-Type:application/json
Authorization:key=API_KEY
{
   "to": "/topics/movies",
   "registration_tokens": ["nKctODamlM4:CKrh_PC8kIb7O...", "1uoasi24:9jsjwuw...", "798aywu:cba420..."],
}

示例结果

HTTP 200 OK
{
  "results":[
    {},
    {"error":"NOT_FOUND"},
    {},
  ]
}

【讨论】:

  • 这些 API 的服务帐户需要哪些角色?
  • @EugeneS 我不确定你的意思。最小角色 (iirc) 是仅查看访问权限的角色。如果他们可以查看 API 密钥,那么他们就很好了。
  • 我正在使用 dotnet SDK,它使用服务帐户(带有私钥的 json)来发送消息。当我尝试在这个 api 上使用相同的方法时,我得到 401。所以我想知道是否可以在不使用服务器 API 密钥的情况下调用这些 api,就像使用发送一样。
  • 我之前没有尝试过使用.net SDK,所以我不能确定。但我知道大多数(如果不是全部)针对 FCM 的请求只需要来自其预期项目的服务器密钥。
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2017-12-18
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多