Web推送通知有一些问题。我可以定期发送通知,但是,当我发送两个通知而第一个通知仍在屏幕上可见时,第二个覆盖第一个。
REST API由使用C#编写的MVC站点调用,我发送的对象如下:
var obj = new
{
app_id = _appKey,
contents = new { en = message },
headings = new { en = title },
included_segments = new[] { "All" },
url,
chrome_web_icon = imageUrl,
priority = 1,
id = DateTime.Now.ToString("yyyyMMddHHmmss")
};
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过同样的问题?我该如何解决?
从OneSignal人员那里得到了这个答案。
使用我们REST API以编程方式发送通知时,可以使用undocumented参数web_push_topic。
在一组共享相同通知的通知中web_push_topic,新接收到的通知将用相同主题替换旧接收到的通知。仅共享相同主题的通知将被替换;没有主题或主题不同的通知将不会被替换。您可以为不同的通知集设置不同的主题,以控制哪些通知停留在屏幕上。
该web_push_topic值可以是任何字符串值。
在Chrome上,即使其他通知与您的网站或OneSignal无关,任何时候最多也可以显示3条通知。这意味着您只能向用户显示3种通知,不包括当时可能显示的其他通知。在Windows的Firefox上,一次可以显示更多通知(6个以上)。
在Mac上的Firefox和Mac上的Safari上,一次只能显示一个通知,即使其他通知与您的网站或OneSignal不相关。通知还会在5秒钟内迅速消失,并且此时间不可自定义。
在Android上的Chrome / Firefox上,一次可以显示多个通知。
如果您未指定web_push_topic,则每个通知将被一个较新的通知替换。如果确实指定web_push_topic,则可以选择将替换哪些通知以及将堆叠哪些通知。
使用我们的API发送通知时,为web_push_topic设置字符串值将为通知设置主题。共享同一主题的所有通知将互相替换,但是具有不同主题的任何通知将不被替换。
因此,假设您发送了4条通知:
观察到的通知顺序为:
示例代码:
payload = {"app_id": "5eb5a37e-b458-11e3-ac11-000c2940e62c",
"include_player_ids": ["6392d91a-b206-4b7b-a620-cd68e32c3a76"],
"contents": {"en": "English Message"},
"web_push_topic": 'Unique for every notification'}
Run Code Online (Sandbox Code Playgroud)