Ruby on rails 错误:数据必须是对象,值必须是数组-来自Rails应用程序的推送令牌

Ruby on rails 错误:数据必须是对象,值必须是数组-来自Rails应用程序的推送令牌,ruby-on-rails,ruby,expo,Ruby On Rails,Ruby,Expo,我有一个Rails应用程序,我想通过sidekiq向Expo发送一个post请求,以便处理应用程序内通知。应用程序的API是使用Node.JS构建的,推送令牌成功执行时使用以下代码: axios({ method: "post", url: "https://exp.host/--/api/v2/push/send",

我有一个Rails应用程序,我想通过sidekiq向Expo发送一个post请求,以便处理应用程序内通知。应用程序的API是使用Node.JS构建的,推送令牌成功执行时使用以下代码:

                    axios({
                        method: "post",
                        url: "https://exp.host/--/api/v2/push/send",
                        data: {
                            to: result.expo_push_token,
                            title: `${data.user.first_name}`,
                            sound: "default",
                            body: shortMessage,
                            data: {
                                status: "ok",
                                body: shortMessage,
                                title: `${data.user.first_name}`,
                                msgUser: data.user,
                                convoId: data.room,
                            }
                        }
                    })
在Rails应用程序中,在我想向应用程序传递数据对象之前,一切都正常工作。以下是有效的方法:

        push_tokens = PushToken.where(user_id: other_user)

        push_tokens.each do |token|
            params = ({

              to: token.expo_push_token,
              title: user.first_name,
              sound: "default",
              body: msg.body
            })


            puts params
            puts params.class

            x = Net::HTTP.post_form(URI.parse('https://exp.host/--/api/v2/push/send'), params)
            puts x.body
然后当我添加数据对象时,它给出了错误:
{'errors':[{'code:'API\u error','message':'child'data\'失败,因为[\'data\'必须是对象],'value\'必须是数组。}]

        push_tokens.each do |token|
            params = ({

              to: token.expo_push_token,
              title: user.first_name,
              sound: "default",
              body: msg.body,
              data: {
                status: "ok",
                msgUser: {
                  id: user.id,
                  avatar_file_name: user.avatar_file_name,
                  first_name: user.first_name,
                },
                convoId: msg.convo_id,
                body: msg.body,
                title: user.first_name,
              },
            })


            puts params
            puts params.class

            x = Net::HTTP.post_form(URI.parse('https://exp.host/--/api/v2/push/send'), params)
            puts x.body
最初,我将一个ActiveRecord传递给数据给
msgUser:user
,并认为这可能是问题所在,但当我自己创建一个数组时,它没有什么区别:
msgUser:{id:user.id,avatar\u文件名:user.avatar\u文件名,first\u name:user.first\u name,},
。一个简单的
数据:{status:'ok'}
也不起作用

我还尝试了
数据:[状态:'ok']
[]
参数to_json
,以及
参数as_json
,但我得到了相同的错误


如何通过Rails post请求将此
数据
对象成功发送到expo推送令牌?

这是我的应用程序中的一个工作代码,您可以尝试一下吗

在您触发作业的控制器中,执行以下操作

# Controller
push_tokens.each do |token|
  WorkerClass.perform_async(token, @user)
end

# Worker file
class WorkerClass
  def perform(token, user)
    uri = URI.parse("https://exp.host/--/api/v2/push/send")
    Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
      request = Net::HTTP::Post.new(uri.path, {'Content-Type' => 'application/json'})
      request.body = {"to"=>token.expo_push_token, "title"=>user.first_name, "body"=>"your_message", "data"=>{"status"=>"ok"}}.to_json
      response = http.request(request)
    end
  end
end

这适用于我
curl-H“内容类型:application/json”-X POSThttps://exp.host/--/api/v2/push/send -d'{“to”:“ExponentPushToken[PUSHTOKEN],“title”:“title”,“body”:“这就像一个魔咒!”,“data”:{“keyA”:“my_value_1”,“keyB”:“my_value_2”}
。看一看,我不确定你的建议是什么,你链接到了什么。它看起来像Python SDK?在第一个例子中,我已经用另一种语言介绍了Rails的工作方式——我想知道Rails方式为什么不工作,以及上面写入数据对象的正确方式。我觉得它不能工作的原因是,由于您的键是符号化的,在我的代码中,我使用
dict
中的键和值作为字符串。此外,SDK属于Python,但只是对错误的引用。@KedarnagMukanahallipatna我在所有内容周围都加了引号,这没有什么区别。我想强调的是,只有当我添加了数据对象时,才出现了错误。谢谢-这很有效!仍然不确定为什么添加数据对象会产生错误,但在此之前,通知工作正常。另外,我不需要在所有键周围加引号,我相信这是您配置调用的方式解决了问题。非常感谢你的帮助!