如果设备令牌更改,如何将推送通知发送到多个设备(属于一个用户)?

问题描述:

的情况是这样的:如果设备令牌更改,如何将推送通知发送到多个设备(属于一个用户)?

  1. 用户登录到他们的iPhone上
  2. 用户登录应用程序中使用iPhone B上的相同的应用程序现在

,在数据库,一个用户有2个令牌,这是正确的。

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

说,该用户删除的应用程序,再次安装它(在两个设备上),这意味着,在APN的令牌改变,因此在我们的数据库中,有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个令牌)。 如果他们继续删除和安装应用程序(可能会发生:)),我会在数据库中为一个用户提供大量令牌,并认为他们拥有如此众多的设备,而实际上,有一个很多无效的令牌。

如何防止?

+0

来自推送服务器的反馈信息从来都不是很好,但我认为它现在已经有了很大的改进。您是否检查了最新文档,了解当您发送推送时服务器返回的信息是否包含推送令牌是否无效或推送无法送达的信息?但无论如何,这不是一个边缘案例。虽然它可能,谁实际上要删除和重新安装应用程序很多次,它会导致数据库中的“大量”条目? – Gruntcakes

Pushwoosh定期从无效标记中清除其数据库(每天大约一次),因此拥有“大量”条目应该不成问题。至于发送推送到一个用户的多个设备,这种情况下有一个特定的Push by UserID功能。

的想法是设置一个登录事件特定的用户名,并重新设置为默认值在以下方法注销:

[[PushNotificationManager pushManager] setUserId:@“external_user_1”] 

一旦用户名设置,你可以发送你/的CreateMessage API具有“用户”参数的请求:

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

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