ruby-on-rails - 我正在使用`fcm` gem 发送推送通知,它适用于 android 但不适用于 IOS
问题描述
我正在开发需要向 IOS 设备发送通知的后端。我已经正确配置了 APN 证书密码和 Firebase 上的所有内容,但有时通知仍会从简单脚本发送到 IOS,但有时它不会发送。但是在 Ruby on rails 上它永远不会发生。我已正确检查并包含所有文件。还是遇到这个问题。
以下是我为发送通知而制作的脚本,它从用户表中获取设计令牌。
user = User.find(86)
devises = user.devises
devises.each do |d|
response = send_notification(title, body, d, action, type)
end
fcm = FCM.new("my_fcm_server_key_log_key_from_firebase")
registration_ids = ["#{devise.token.to_s}"]
options = { "data": {
"title": title,
"body": body,
"msg_action": action,
"msg_type": type,
},
"badge": 1,
"alert": "dasdas",
"sound": "default"
}
response = fcm.send(registration_ids, options)
puts response.inspect
响应成功,但仍然无法到达手机,但是当我对所有内容进行硬编码并使用简单的脚本时,它也可以从服务器和本地系统正常运行,但在 Ruby on rails 中却不行。在 Android 上它运行良好,没有任何问题。即使在几个小时后使用简单的脚本 IOS 也停止使用简单的 ruby 脚本工作。
如果您有任何适用于 ruby on rails 的工作样本,请告诉我。
解决方案
我必须在 FCM 上为 IOS 应用程序上传认证文件,通常是开发人员许可证 p12 或 p8 文件,需要上传到您的新应用程序项目中。
我必须更改我为 IOS 发送的格式,现在我有地方条件,如果它是 android,而不是有不同的格式,我有 IOS,而不是我放了不同的格式,只有很小的变化。
if devise.platform == "iOS"
options = { "notification": {
"title": title,
"body": body,
"msg_action": action,
"msg_type": type,
},
"badge": 1,
"alert": "dasdas",
"sound": "default" }
else
options = {
"data": {
"title": title,
"body": body,
"msg_action": action,
"msg_type": type,
"click_action": ".DashBoardActivity",
},
}
end
需要注意的另一点是您检查了您的应用程序日志,有时当应用程序未运行时,您会收到推送通知,但如果应用程序正在运行,那么您将不会显示任何内容,但在幕后您会收到推送通知,您必须使用您的 IOS 应用程序编码来处理。我添加了badge, alert, sound
这些是针对 IOS 的。
给出了答案来解释@Brad 发布的评论。
推荐阅读
- haskell - Haskell 将 RoseTree 限制在深度 n
- docker - docker push 因未授权而失败:需要身份验证,仅适用于大图像
- python - 在以下情况下无法删除 Python 列表中多次出现的元素(尽管使用了 for 循环)(关闭前请完整阅读!)
- react-native - 使用 Redux Thunk 测试 AsyncStorage
- arrays - 视图函数未返回有效响应。该函数要么返回 None 要么在没有 return 语句的情况下结束
- linked-list - 反转链表时遇到问题
- java - 在Java mongodb中使用find和distinct创建游标
- javascript - 未捕获的类型错误:无法读取 Reactjs 中未定义的属性“地图”-redux
- python - 以帧速率独立(增量时间)移动时精灵口吃 - pygame
- c# - 实现 Kubernetes 探针的代码更改