首页 > 解决方案 > 我正在使用`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 的工作样本,请告诉我。

标签: ruby-on-railsfirebasefirebase-cloud-messagingapple-push-notifications

解决方案


我必须在 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 发布的评论。


推荐阅读