在这里我就以“摩拜单车”为例子,来阐述我认为实现的思路。这时候分两种情况,一种是自己服务器管理deviceToken,一种是集成第三方推送(以极光推送为例子)
一.自己服务器管理deviceToken
- 1 当程序打开,我们会注册远程推送通知,这时候在得到苹果服务器给我们的deviceToken以后,我们会将我们的用户信息和deviceToken发送给我们自己的服务器;
- 2 在扫码的时候,我们会把用户的信息和车的信息发送给服务器;
- 3 服务器在接收上诉两个请求之后,会将用户和deviceToken和车关联起来;
- 4 当我们在骑完之后锁车的时候,锁这个终端会将车的信息发送给服务器;
- 5 服务器在接收到锁发的信息之后,会根据车的信息找到用户,在根据用户找到deviceToken,然后再与苹果服务器进行交互,把deviceToken和要发的信息发送给苹果服务器;
- 6 最后通过苹果服务器,根据发送过来的deviceToken,确定设备和程序,然后把信息发送过去
二.极光服务器管理deviceToken
- 1 当程序打开,我们会注册远程推送通知,这时候在得到苹果服务器给我们的deviceToken以后,我们会将deviceToken发送给极光服务器;
- 2 极光服务器会反给我们一个RegistrationID,我们会把用户信息RegistrationID发送给我们自己的服务器;
下面是获取RegistrationID的核心代码
[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
NSLog(@"resCode : %d,registrationID: %@",resCode,registrationID);
}];
- 3 在扫码的时候,我们会把用户的信息和车的信息发送给服务器,这时候会在两个地方存储着RegistrationID,一个是极光服务器,一个是我们自己的服务器,这很重要,它是一个纽带;
- 4 服务器在接收上诉两个请求之后,会将用户和RegistrationID和车关联起来;
- 5 当我们在骑完之后锁车的时候,锁这个终端会将车的信息发送给服务器;
- 6 服务器在接收到锁发的信息之后,会根据车的信息找到用户,在根据用户找到RegistrationID,然后再与极光服务器进行交互,把RegistrationID和要发的信息发送给极光服务器;
- 7 极光服务器在根据RegistrationID找到对应的deviceToken,然后将信息和deviceToken发送给苹果服务器;
- 8 最后通过苹果服务器,根据发送过来的deviceToken,确定设备和程序,然后把信息发送过去
这个思路仅供参考,这只是个人观点,如有错误,也希望指正,一起成长。