我可以从多个服务器向我的应用程序发送远程推送通知吗?

时间:2015-01-20 16:45:45

标签: parse-platform push-notification

我正在构建一个iOS&承包商的Android应用程序。 基本上它是一个客户端,应该显示来自服务器的通知列表。

承包商计划将此应用程序交给他的多个客户公司。对于每个公司,他将发送一个服务器(专用于该客户端),移动应用程序将安装在任何设备上,对于每个客户端车队,驱动程序只需要输入客户端服务器的IP。

我的问题是 - 我可以将Parse(或任何其他远程推送聚合器)与单个应用程序一起使用,但是有多个服务器向设备发送推送通知(这些将不会'广播'推送到所有设备 - 它们将针对特定设备)?

1 个答案:

答案 0 :(得分:1)

在这种情况下我不确定“服务器”是什么,但是Parse 应该能够处理你想要的东西。

我会在Parse中创建标准UserInstallation类,以及一个名为“company”(或“client”或其他)的自定义类。你可以为这个类添加你喜欢的任何字段,但对你来说似乎重要的是“IP地址”。

您可以将InstallationUserUsercompany相关联。数据结构如下:

Installation -> (Pointer)User
User -> (Pointer)company
company -> (String)ipAddress

然后,当您要为特定IP地址发送PUSH时,您可以执行以下操作:

  1. 查询与“IP地址”匹配的company
  2. 查询将#1结果作为User属性的所有company个对象。
  3. 查询#2返回的数组中Installation个对象的所有User个对象。
  4. 使用#3中的查询发送PUSH。
  5. 以下是在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,但建议您从云代码功能。