如何在设备令牌更改时向多个设备(属于同一用户)发送推送通知?

3
案例如下:
1. 用户在他们的iPhone A上登录应用程序。 2. 用户在他们的iPhone B上登录同一应用程序。
现在,在数据库中,一个用户有两个令牌,这是正确的。
+---------+-------------------+
| user_id |   device_token    |
+---------+-------------------+
|       1 | 1st_device_token1 |
|       1 | 2nd_device_token1 |
+---------+-------------------+

假设用户删除了应用程序,然后在两个设备上重新安装了它,这意味着APNs中的令牌已更改,因此在我们的数据库中有4个唯一的令牌。

+---------+-----------------------+
| user_id |     device_token      |
+---------+-----------------------+
|       1 | 1st_device_token1     |
|       1 | 2nd_device_token1     |
|       1 | 1st_device_token1_new |
|       1 | 2nd_device_token1_new |
+---------+-----------------------+

现在,将会向4个设备(4个令牌)发送该用户的推送通知。

如果他们不断删除并安装应用程序(可能会发生: ),那么我将在数据库中为一个用户存储大量令牌,并认为他们拥有如此多的设备,而实际上有很多无效的令牌。

如何防止这种情况?


推送服务器的反馈信息以往并不好,但我认为现在已经改善了很多。您有查看最新文档了解发送推送时服务器返回的信息是否包含推送令牌无效或推送无法传递的信息吗?但无论如何,这实际上是一个边缘案例。虽然有可能发生,但是谁会删除并多次重新安装应用程序以导致您的数据库中出现“大量”条目呢? - Gruntcakes
1个回答

0
Pushwoosh定期从其数据库中清除无效的令牌(每天一次左右),因此拥有“大量”条目不应该是问题。至于向一个用户的多个设备发送推送,这种情况下有一个特定的按UserID推送功能。
思路是在登录事件上设置特定的UserID,并在注销时将其重置为默认值,方法如下:
[[PushNotificationManager pushManager] setUserId:@“external_user_1”]

一旦设置了UserID,您可以使用“users”参数发送您的/createMessage API请求:

{
  "request": {
    "application": "APPLICATION_CODE",
    "auth": "API_ACCESS_TOKEN",
    "notifications": [{
      "send_date": "now",
      "content": "Hello world!",
      "users":["external_user_1"]
    }]
  }
}

此功能适用于所有付款计划,因此您应该可以访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接