我正在构建一个iOS&承包商的Android应用程序。 基本上它是一个客户端,应该显示来自服务器的通知列表。
承包商计划将此应用程序交给他的多个客户公司。对于每个公司,他将发送一个服务器(专用于该客户端),移动应用程序将安装在任何设备上,对于每个客户端车队,驱动程序只需要输入客户端服务器的IP。
我的问题是 - 我可以将Parse(或任何其他远程推送聚合器)与单个应用程序一起使用,但是有多个服务器向设备发送推送通知(这些将不会'广播'推送到所有设备 - 它们将针对特定设备)?
答案 0 :(得分:1)
在这种情况下我不确定“服务器”是什么,但是Parse 应该能够处理你想要的东西。
我会在Parse中创建标准User
和Installation
类,以及一个名为“company”(或“client”或其他)的自定义类。你可以为这个类添加你喜欢的任何字段,但对你来说似乎重要的是“IP地址”。
您可以将Installation
与User
和User
与company
相关联。数据结构如下:
Installation -> (Pointer)User
User -> (Pointer)company
company -> (String)ipAddress
然后,当您要为特定IP地址发送PUSH时,您可以执行以下操作:
company
。User
属性的所有company
个对象。Installation
个对象的所有User
个对象。以下是在Objective-C中执行此操作的方法:
- (void)sendPushMessage:(NSString *)message
toClientWithIpAddress:(NSString *)ipAddress {
PFQuery *companyQuery = [PFQuery queryWithClassName:@"company"];
[companyQuery whereKey:@"ipAddress" equalTo:ipAddress];
[companyQuery getFirstObjectInBackgroundWithBlock:^(PFObject *company, NSError *error) {
// Do real error handling
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"company" equalTo:company];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
// Do real error handling
PFQuery *installationQuery = [PFInstallation query];
[installationQuery whereKey:@"user" containedIn:users];
PFPush *push = [PFPush push];
[push setQuery:installationQuery];
[push setMessage:message];
// You could also have a completion block for this, if desired
[push sendPushInBackground];
}
];
}
];
}
警告: 虽然我在Objective-C中编写了代码,虽然Parse 允许客户端PUSH,但建议您从云代码功能。