【问题标题】:Using FCM token obtained via batchImport (iOS)使用通过 batchImport (iOS) 获得的 FCM 令牌
【发布时间】:2017-11-22 08:51:36
【问题描述】:

我正在尝试迁移现有应用以使用 FCM。我使用 curl 将 APNS 令牌发送到“batchImport”服务:

curl -H "Authorization: key=<auth key>" -H "Content-Type: application/json" -X POST -d "{\"application\": \"com.myco.myapp\", \"sandbox\": false, \"apns_tokens\": [\"410564ffd0aaf91dd06e8ab7b8362238e2c7f1bbd5a520d6afaff38c9b670a90\"] }" https://iid.googleapis.com/iid/v1:batchImport

我收到一个“registration_token”作为回应。 然后,当我尝试使用该令牌请求推送通知时,它不会到达设备上。这是卷曲:

curl -H "Authorization: key=<Auth key>" -H "Content-Type: application/json" -d "{\"to\":\"<registration_token_from_above>\", \"notification\":{\"body\":\"First\", \"title\":\"Num 1\"}}" -X POST https://fcm.googleapis.com/fcm/send

我也无法从 Firebase 控制台中的“通知”工具发送。

我从这里的示例从头开始创建了第二个项目:https://github.com/firebase/quickstart-ios.git。这个可以在 Firebase 控制台和 curl 中使用。

在我使用 batchImport 服务时,Firebase 客户端代码中是否发生了一些神奇的事情?如果是这样,您将如何从不同的服务迁移到 FCM?

【问题讨论】:

  • 从批量导入生成的令牌应该像所有其他令牌一样工作,当您使用 curl 从 batchImport 发送到令牌时,您得到什么响应?
  • 这是{"results":[{"registration_token":"cpy8GQmQSFE:APA91bFcOVrbT88MUEhWCTs5E9&lt;etc etc&gt;","apns_token":"410564ffd0aaf91dd06e8ab7b8362238e2c7f1bbd5a520d6afaff38c9b670a90","status":"OK"}]}的回复
  • 对不起,我的意思是您使用registration_token向设备发送下游消息时得到的响应。
  • 向设备请求通知时全是微笑:{"multicast_id":6605894166055572393,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1467040269913059%c6939f07c6939f07"}]}
  • 在这种情况下,我认为问题不在于registration_token,而是FCM将令牌映射到适当的APNs令牌(不太可能但可能)或者客户端存在问题设置为接收通知。您能否添加您的发送请求和接收问题通知的代码?

标签: ios google-cloud-messaging firebase-cloud-messaging


【解决方案1】:

在下游 curl 命令中添加“priority”:“high”; 另请注意,iOS 设备不支持“title”。

【讨论】:

  • 这正是问题所在。当提供优先级:高时,这开始工作。有没有人认为这应该是默认的???在 iOS 世界中,等效优先级设置默认为高 (10):link
【解决方案2】:

使用通过 batchImport 创建的令牌发送通知的另一个可能问题:注意正确设置 sandbox 参数。我的通知因各种奇怪的错误而被拒绝——无效的令牌、未注册的令牌、无效的 APNS 凭据——直到我设置了sandbox: true

【讨论】:

  • Apple 使用两台服务器进行推送通知 - 沙盒和生产。如果您在开发时使用 Xcode 运行应用程序,它总是会创建一个开发版本(沙盒)。如果您使用 Apple Store/AdHoc 选项创建 IPA,它将创建生产版本,而 Enterprise/Development 选项创建开发版本。您可以在构建 IPA 时检查 IPA 摘要中的 aps-environment 标志,以确认 APNS 是指向开发(沙盒)还是生产。我花了将近 3 天的时间进行故障排除才意识到这一点。
【解决方案3】:

它是如何工作的?

在 Firebase 文档中找到了这个:

FCM 实施在您的环境中包括一个应用服务器,该应用服务器 通过 HTTP 或 XMPP 协议以及客户端应用程序与 FCM 交互。 此外,FCM 包括 Notifications 控制台,您可以使用它向客户端应用发送通知。

Firebase 通知基于 Firebase 云消息传递和共享 用于客户端开发的相同 FCM SDK。用于测试或发送 具有强大的内置定位功能的营销或参与信息 分析,您可以使用通知。对于部署更多 复杂的消息传递要求,FCM 是正确的选择。

您将如何从不同的服务迁移到 FCM?

文档中有完整的Migration Guide for iOS

将您的 GCM 项目作为 Firebase 项目导入

1.在 Firebase 控制台中,选择 Import Google Project。

2.从现有项目列表中选择您的 GCM 项目,然后选择添加 Firebase。

3.在 Firebase 欢迎屏幕中,选择将 Firebase 添加到您的 iOS 应用。

4. 提供您的捆绑包名称和可选的应用商店 ID,然后选择添加应用。您的 Firebase 应用的新 GoogleServices-info.plist 文件是 已下载。

5.选择继续并按照详细说明为您的应用创建 xcworkspace 文件并在启动时连接到 Firebase。

【讨论】:

  • 谢谢,但我关于迁移的问题是关于令牌的处理。在我去构建一个真正的服务器之前,我正在使用curl 来模拟服务器的角色。因此,如果我有一个现有应用程序已在我们的本地数据库中为我们现有的解决方案注册了其 APNS 令牌,那么看起来我应该使用 batchImport 服务调用将它们转换为注册令牌。但是,当我测试时,我看不到这些令牌可用于发送通知。那么,是否必须以某种方式在客户端服务器上使用客户端 API?
  • 我对您的程序并不完全熟悉。但是你可以随时给GCM iOS看一下,注册令牌的处理已经详细提到了:)
猜你喜欢
  • 2018-11-27
  • 2016-09-24
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2020-04-01
  • 2017-11-08
相关资源
最近更新 更多