如何通过移动设备首选项设置过滤 OneSignal 推送消息
Posted
技术标签:
【中文标题】如何通过移动设备首选项设置过滤 OneSignal 推送消息【英文标题】:How to filter the OneSignal push message by the mobile devise preferences settings 【发布时间】:2021-06-23 07:14:45 【问题描述】:我是 OneSignal 的新手。根据我的设计,我可以
使用 sendTag("threshold", 2) 逐段注册设计 使用 sendTage("field", 1); 将相同的设计注册到另一个 segmebt;我可以从一个 php 脚本向一个段发送推送通知(我在下面显示代码)。
上下文:
移动用户需要监测田地的芽温。 风场业主有2个,业主监控的场地有1个。 有4部手机:2部按字段
换句话说 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 脚本以发送推送通知 仅限:
用户手机注册到带有“filed: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】:我得到了一些好的结果(见下面的代码),但是当温度低于阈值时,我需要向分段 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
【讨论】:
以上是关于如何通过移动设备首选项设置过滤 OneSignal 推送消息的主要内容,如果未能解决你的问题,请参考以下文章
仅当 onesignal 设备 ID 准备好时,如何启动 android 应用程序?
在目标设备上读取 UIAutomation 的 UIAApplication.setPreferencesValueForKey() 设置的首选项?