同一个设备上的同一个APP多次绑定返回的user_id相同,channel_id也相同。
同一个APP在不同的设备上绑定user_id是不相同的,channel_id也不相同。
同一台设备对应唯一一个channel_id。(多个APP共用一条通道),所以在同一台设备上的多个APP绑定时,它们的channel_id是相同的。
同一台设备上的不同APP对应不同的user_id。
不同设备上的相同APP对应不同的一对[channel_id, user_id]
怎么让自定义账户体系的id跟推送账户[channel_id,user_id] 对应 ?
目前百度云推送消息只能到APP,不能为APP的自定义账户推送消息。如果想对APP的单个自定义账户准备推送消息,那么就需要知道当前用户客户端的设备在云服务器上的维护信息,所以自己要在服务器上建立一张对应表[自定义用户ID,user_id,channel_id]。
自定义账户体系的id跟推送账户[channel_id,user_id] 对应是一次绑定就可以了吗?
不是!因为自定义账户在APP上,可能会在不同的设备上登录,设备对应的
[channel_id,user_id]就会不同,所以需要实时绑定并维护对应关系。当自定义用户登录APP时,就要重新绑定下对应关系。当用户退出APP,就要删除对应关系。
账号发送消息需要注意什么问题?
服务端给对应的自定义用户发送消息,需要通过维护的关系,来找到云推送的
[channel_id,user_id], 如果找不到对应关系,说明该账号暂时未在线,自动放弃当前消息对云推送服务的调用。云推送的前提就是,云推送客户端相对于云推送服务器是在线的。相对于业务来说,[channel_id,user_id] 对应的客户端APP上的登陆用户,正好是我们希望推送的用户。这样才完成我们账户体系上的一次成功推送。
考虑过同一台设备上同一APP上账户的切换问题么?
同一台设备上同一APP上,对应的[channel_id,user_id] 是一样的,所以a账户登出,b账户登录。如果后端有需要推送的消息给a,那么如果不及时去除账户a的绑定对应关系,那么就很会出现b会收到a的推送消息的情况。所以后台再处理推送的时候,由于前端在不断的登陆登出的变化,用户的对应关系也在变化。服务端在推送消息,要确保获取即时的账户绑定对应关系,从而告知云推送服务端正确的推送的客户端。
延迟问题
即使获取到再即时的绑定对应关系,由于APP上切换账号的迅速,再加上云推送服务器的延迟问题,那么当消息推送到客户端的时候,很可能当前APP上的登录用户,已经不是发出推送的目标用户了,这样就会出现推送发错的问题。为了避免这样的问题,消息体格式,需要有接受用户id(项目编号)标记,在APP端,需要增加消息校验,当前消息是否是自己的消息,如果不是,则丢弃掉,并将告知我们服务端该消息发错,需要重新发送。