如何通过移动设备首选项设置过滤 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() 设置的首选项?

是否可以使用 OneSignal 获取设备令牌

通过“委派”过滤组策略设置

如何使用 Xamarin 在设备之间共享用户首选项