如何在没有 OneSignal Dashboard 的情况下发送推送通知?
Posted
技术标签:
【中文标题】如何在没有 OneSignal Dashboard 的情况下发送推送通知?【英文标题】:How to send push notifications without OneSignal Dashboard? 【发布时间】:2019-07-29 07:15:26 【问题描述】:我想向安装了我的 apk 的所有设备发送推送通知,我按照本教程进行操作:
https://rasupe.com/cara-membuat-push-notifications-di-android-dengan-onesignal-mudah/
并且成功了。
但我想在不通过 OneSignal 仪表板网站的情况下发送推送通知。 我不知道如何在代码中实现它。
你能帮帮我吗..
【问题讨论】:
查看 onesignal API 文档。 已经检查过了,但我真的很难过,先生。我不明白*哭泣TnT 【参考方案1】:使用 URL https://onesignal.com/api/v1/notifications 发出 https POST 请求
添加标题"Content-Type":"application/json"
和"Authorization":"Enter your REST API Key here"
在正文中添加
"app_id": "Enter your app id here",
"headings":
"en": "Title Here"
,
"contents":
"en": "Description Here"
,
"included_segments":["Active Users"]
您可以将通知发送到特定细分市场并为用户创建过滤器等等,请参阅此文档了解更多信息 https://documentation.onesignal.com/reference
【讨论】:
如何向onesignal.com/api/v1/notifications发出POST请求?? 您没有在您的应用程序中发出任何网络请求吗?如果没有,那么您可以探索如何使用流行的库(如 Loopj、Retrofit 或 volley)发出网络请求。 我使用改造库。我也跟着这个教程.. 那怎么办? 无法理解您所面临的问题,能否具体一点。 我通过邮递员先生的解决方案成功发送通知,谢谢..但是如何将它实施到android..有条件(如果有“输入数据”到数据库,那么每个人都会得到推送通知)。我遵循这个教程:codepolitan.com/… 用于输入数据、更新数据、删除数据、查看 mysql 数据库中的数据。【参考方案2】:要在不使用 OneSignal 仪表板的情况下发送通知,您可以将标签附加到用户并通过使用 URL https://onesignal.com/api/v1/notifications 进行 POST 向他们发送通知
只能使用 OneSignal 仪表板创建分段,但可以使用 SDK/API 创建标签。
添加标题"Content-Type":"application/json"
和"Authorization":"Basic <REST API Key>"
在正文中添加
"app_id":"<App Id>",
"headings":
"en":"Title Here"
,
"contents":
"en":"Description Here"
,
"filters":[
"field":"tag",
"key":"level",
"relation":"=",
"value":"10"
,
"operator":"OR"
,
"field":"amount_spent",
"relation":">",
"value":"0"
]
然后发出 JSON 对象请求以完成该过程。
您可以参考以下代码来了解如何将标头附加到 JSON 对象请求以及如何将标签附加到您的用户。 (此请求是使用 android volley 发出的)
String url = "https://onesignal.com/api/v1/notifications";
JSONObject jsonBody;
try
jsonBody = new JSONObject(
"'app_id':'app-id'," +
"'headings': 'en': 'title', " +
"'contents': 'en': 'message'," +
"'filters':['field':'tag','key':'"+id+"','relation':'=','value':'true']"
);
//request a json object response
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
//now handle the response
Toast.makeText(Activity.this, "Notification successfully sent", Toast.LENGTH_SHORT).show();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
//handle the error
Toast.makeText(Activity.this, "An error occurred", Toast.LENGTH_SHORT).show();
error.printStackTrace();
)
//adding header to the request
@Override
public Map<String, String> getHeaders()
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Basic <REST API KEY>");
params.put("Content-type", "application/json");
return params;
;
// Add the request to the queue
Volley.newRequestQueue(Activity.this).add(jsonRequest);
catch (JSONException e)
e.printStackTrace();
为用户添加标签
JSONObject tags = new JSONObject();
try
tags.put("key","value");
//for the above JSON request I have used the following key value pair
// tags.put(id,true);
// where id is a string containing the userId
//true is a boolean value
catch (JSONException e)
e.printStackTrace();
OneSignal.sendTags(tags);
这应该会成功完成您的查询。
【讨论】:
以上是关于如何在没有 OneSignal Dashboard 的情况下发送推送通知?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android studio 中以编程方式取消订阅 OneSignal