通过JSON网络请求发送Onesignal/Gamethrive推送

4

我正在尝试使用以下代码发送JSON请求以发送推送通知,但是网络响应的错误消息显示“找不到app_id”。我正在使用Corona,但只要JSON格式正确,这应该不会影响。

local json = require "json"
local function networkListener( event )

    if ( event.isError ) then
        print( "Network error!" )
    else
        print ( "RESPONSE: " .. event.response )
    end
end

        headers = {}
        headers["app_id"] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        headers["Authorization"] = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
        headers["Content-Type"] = "application/json"

        local params = {}

        commands_json =
             {
                ["contents"] = "English Message"
             }        

        postData = json.encode(commands_json)

        local params = {}
        params.header = headers
        params.body = postData

network.request( "https://onesignal.com/api/v1/notifications","POST",networkListener,params)   
2个回答

2
我能解决这个问题。
function SendJson(url, action, in_json, callback)
  local json = require ( "json" )
  local headers = {}
  headers["Content-Type"] = "application/json"
  headers["Accept-Language"] = "en-US"
 headers["Authorization"] = "Basic  12121321313123" -- put your Rest API

  local params = {}
  params.headers = headers
  params.body = json.encode( in_json )

  network.request ( url, action, callback, params )
end

local function networkListener( event )
  if ( event.isError ) then
    print( "Network error!")
  else
    print ( "RESPONSE: " .. event.response )
  end
end
local jsonToSend = {["app_id"] = "aaaaaa-222-222-33-3333333333", --put yours App ID
                    ["contents"] = {["en"] = "George challenged you to beat his score!"},
                    ["included_segments"] = "All",
                    ["isAndroid"] = true,
                    ["isIos"] = true,}
                    --["include_player_ids"] = ["(RECIPIENT_PLAYER_ID_HERE)"]}


SendJson("https://gamethrive.com/api/v1/notifications", "POST", jsonToSend, networkListener)

1

您的OneSignal仪表板上是否同时设置了Android和Apple应用程序?当使用include_player_ids时,平台(isAndroid和isIos)不是必需参数。

此外,请确保在生产应用程序中不要使用Authorization头,因为某些人可以轻松地分解您的应用程序并获取REST API密钥。当您使用include_player_ids字段时,不需要Authorization头。

有关完整文档,请参见OneSignal创建通知的POST调用。

我还建议您切换到在代码中使用“https://onesignal.com/api/v1/notifications”作为URL,以节省重定向。


jkasten,如果没有使用授权,该方法将无法正常工作。 - Amir
当您删除 ["included_segments"] 并添加回 ["include_player_ids"] 时,响应中会出现错误吗? - jkasten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接