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

Posted

技术标签:

【中文标题】通过 JSON 网络请求发送 Onesignal/gamethrive 推送【英文标题】:Sending Onesignal/gamethrive push by JSON network request 【发布时间】:2015-05-15 05:57:18 【问题描述】:

我正在尝试使用以下代码发送 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)   

【问题讨论】:

【参考方案1】:

我可以解决的。

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)

【讨论】:

【参考方案2】:

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

还要确保您不要在生产应用中使用 Authorization 标头,因为有人可以轻松反汇编您的应用并获取 REST API 密钥。当您使用 include_player_ids 字段时,不需要 Authorization 标头。

请参阅OneSignal create notification POST 电话以获取完整文档。

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

【讨论】:

jkasten,如果不使用该授权,该方法将不起作用。 当您删除 ["included_segments"] 并重新添加 ["include_player_ids"] 时,响应中会出现错误?

以上是关于通过 JSON 网络请求发送 Onesignal/gamethrive 推送的主要内容,如果未能解决你的问题,请参考以下文章

Onesignal include_external_user_ids 在发送推送通知 API 请求时格式不正确

在 android 上未收到 OneSignal 通知,但从 OneSignal 控制台发送

如何使用 OneSignal 发送自定义声音推送通知?

OneSignal 在 Web 通知上发送 js 变量

根据 OneSignal 的用户数据库直接发送 Web 推送 (Chrome - GCM/FCM) 通知

OneSignal在Web通知上发送js变量