android - 如何通过移动设备首选项设置过滤 OneSignal 推送消息
问题描述
我对 OneSignal 很陌生。根据我的设计,我可以
- 使用 sendTag("threshold", 2) 按段注册设备
- 使用 sendTage("field", 1); 将相同的设计注册到另一个 segmebt;
从 PHP 脚本中,我可以向段发送推送通知(我在下面显示代码)。
语境:
移动用户需要监测田地的芽温。风场业主有2个,业主监控的场地有1个。有 4 部手机:两个按字段
换句话说,mobile_11 监控字段 1 mobile_12 监控字段 1 mobile_21 监控字段 2 mobile_22 监控字段 2
我的 APP 为用户手机提供了选择他想要监控的字段并定义阈值温度的可能性。
- 如果字段 1 的芽温度低于阈值,则只需向 mobile_11 和 mobile_12 发送推送消息
- 如果字段 2 的芽温度低于阈值,则只需向 mobile_21 和 mobile_22 发送推送消息
OneSignal OneSignal 是一个很棒的工具。我创建了三个段
- field-1 => 字段为 1
- field-2 => 字段为 2
- 阈值 => 阈值存在
我的APP有两种形式,一种是领域的,一种是门槛的
('Terrain' 是 id 为 1 的字段,'Alarme' 是阈值)
在我的 Android 中,我检查了字段 1 和阈值 8。在我的 OneSignal 控制台中,我现在可以观察到这一行(来自用户选项卡)
我不确定我的方法是否是最好的方法,也许我必须适应我的两种形式,但从那时起,我想知道如何修改我的 php 脚本以仅发送推送通知:
- 用户移动注册到具有“归档:1”的段
- 用户移动注册到“阈值”段,但值为 8
我尝试了以下但不考虑阈值
function sendMessage() {
$content = array(
"en" => 'Une station est en alarme'
);
$fields = array(
'app_id' => "55555555-xxxxx-4100-bb42-xxxxxxxxx", // wrong app_id
'included_segments' => array(
'threshold'
),
'data' => array(
"threshold" => "2"
),
'contents' => $content
);
$fields = json_encode($fields);
print("\nJSON sent:\n");
echo '<pre>';
print($fields);
echo '</pre>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Authorization: Basic ZTkYYYYYYYMtYTBhMi00ZTY3LYYYYYYYYYYYYYYYYY' // Wrong Authorisation
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
在上面的示例中,发送了推送消息,这不应该,因为阈值实际上是 8
你明白我的问题吗?如果没有,请随时向我询问其他信息,这将是最好的方法吗?它必须适用于IOS和Android
非常感谢
解决方案
我得到了一些好的结果(见下面的代码),但是当温度低于阈值时,我需要向段 1 和 0 或段 2 和 0 发送消息。
要恢复,我有两场酒(以后我可以有更多的场来监控)
一个用户可以注册到字段 1 他正在注册到分段字段 1 另一个用户可以注册到字段 2 他正在注册到分段字段 2 一个用户可以注册到分段字段 0 以在发生故障时报警温度低于任何字段的阈值。
此代码工作正常,但它永远不会警告注册到段字段 0 的用户
'filters' => array(
array(
"field" => "tag",
"key" => "threshold",
"relation" => ">",
"value" => $lowestTemperature),
array(
"operator" => "AND"),
array(
"field" => "tag",
"key" => "field",
"relation" => "=",
"value" => $fieldID
)
),
注意:$fieldID 永远不会得到 0 的值
然后我尝试了以下但没有成功
'filters' => array(
array(
array(
"field" => "tag",
"key" => "threshold",
"relation" => ">",
"value" => $lowestTemperature
),
array(
"operator" => "AND"
),
array(
"field" => "tag",
"key" => "field",
"relation" => "=",
"value" => $fieldID
)
),
array(
"operator" => "OR"
),
array(
array(
"field" => "tag",
"key" => "threshold",
"relation" => ">",
"value" => $lowestTemperature
),
array(
"operator" => "AND"
),
array(
"field" => "tag",
"key" => "field",
"relation" => "=",
"value" => 0
)
)
),
会有任何解决方案有类似的东西
if(($value < $threshold AND $field == $fieldID) OR ($value < $threshold AND $field == 0))
{
// Send push notification
}
推荐阅读
- bash - 通过更改顺序重命名文件夹
- arangodb - 没有前导零的 AQL 数字文字解析错误
- javascript - 无法让 $emit 在 vuejs 中将 prop 传递给父级
- python - Python 正则表达式:在文本中以任何形式查找特定短语(包括如果后跟 . 或 ,)
- windows - Windows 任务计划程序 - 查看任务描述中的换行符
- javascript - JQuery datepicker 回调函数和模糊事件
- apache-kafka - RocksDB in Kafka stream reporting no space when there is space available
- r - 从 R 中的大型数据集中获取年份的更快方法
- php - 无法在 yii1 的 cjuidatepicker 中更改用户视图的日期格式
- javascript - 使用 javascript document.cookie="domain=" v/s document.cookie="domain:" 设置 cookie 时域的差异