Отправить уведомление API OneSignal для нескольких пользователей

Я пытаюсь отправить уведомление API от OneSignal в API REST, когда я отправляю для уникального пользователя, он работает правильно, но когда в Json нужно более одного пользователя, уведомление отправляется для уникального пользователя.

My JSON (listOnesignal):[{"key":"user","relation":"=","value":"YAlBcuwiOJ"},{"key":"user","relation":"=","value":"MSoVMRxzbh"}]    

var jsonBody = { 
                  app_id: "appid", 
                  android_background_data: true,
                  tags: listOneSignal,
                  data: {anything}
    };

person Mateus Carvalho    schedule 15.05.2016    source источник


Ответы (2)


Вам нужно добавить оператор OR между каждой записью, так как AND используется по умолчанию.

[{"key":"user","relation":"=","value":"YAlBcuwiOJ"},
 {"operator": "OR"},
 {"key":"user","relation":"=","value":"MSoVMRxzbh"}]

Обратите внимание, что существует ограничение в 200 записей (включая OR) в поле tags на вызов REST API. Вместо этого вы можете использовать include_player_ids, если вам нужно одновременно настроить таргетинг на большее количество устройств, так как вы можете отправить до 2000.

Дополнительные сведения см. на странице документации OneSignal создать REST API уведомлений.

person jkasten    schedule 16.05.2016
comment
Но мне нужно отправить для двух или более пользователей в то же время, это будет работать? - person Mateus Carvalho; 16.05.2016
comment
Да, в приведенном выше примере и пользователь YAlBcuwiOJ, и MSoVMRxzbh получат одно и то же уведомление. - person jkasten; 16.05.2016
comment
Спасибо, @jkasten. Я использую CSharp SDK, и для него почти нет документации. Ваш пример привел меня в правильном направлении, и я нашел, как сделать то же самое с C#. Я добавил этот ответ на случай, если он будет полезен для тех, кто ищет то же самое. - person Andrew; 13.02.2018

Если кто-то использует OneSignal CSharp SDK, вы можете сделать то же самое (хотя в этом примере используются теги вместо идентификаторов игроков):

IList<INotificationFilter> filters = new List<INotificationFilter>();

foreach (var tag in tagList)
{
    var filter = new NotificationFilterField
    {
        Field = NotificationFilterFieldTypeEnum.Tag,
        Key = "tag_id",
        Value = tag,
        Relation = "="
    };

    if (filters.Count > 0)
        filters.Add(new NotificationFilterOperator { Operator = "OR" });

    filters.Add(filter);
}

var client = new OneSignalClient("...");

var options = new NotificationCreateOptions
{
    AppId = new Guid("..."),
    Filters = filters
};

options.Contents.Add(...);
client.Notifications.Create(options);
person Andrew    schedule 12.02.2018