我正在使用`fcm` gem发送推送通知,它对于android正常运行,但不适用于IOS

时间:2019-10-27 07:45:04

标签: ruby-on-rails firebase firebase-cloud-messaging apple-push-notifications

我正在开发需要将通知发送到IOS设备的后端。我已经在Firebase上正确配置了APN证书密码和所有内容,但是仍然有时会从简单脚本向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脚本工作。

如果您有任何红宝石在轨道上的工作样品,请告诉我。

1 个答案:

答案 0 :(得分:0)

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