使用PushSharp为ios和android处理多个通知

时间:2013-07-08 21:27:21

标签: notifications push pushsharp

我已经实现了一个每3分钟运行一次的Windows服务,并轮询数据库以获取准备发送的通知。我将它们收集到一个列表中,确定它是ios还是android通知,然后调用PushBroker(PushSharp解决方案作为我的解决方案项目中的编译解决方案包含在内)然后迭代列表中的项目进行如下处理:

    static void ProcessIOS(List<Client> IOS)
   {
       PushBroker push = new PushBroker();
       push.OnNotificationSent += NotificationSent;
       push.OnChannelException += ChannelException;
       push.OnServiceException += ServiceException;
       push.OnNotificationFailed += NotificationFailed;
       push.OnDeviceSubscriptionExpired += DeviceSubscriptionExpired;
       push.OnDeviceSubscriptionChanged += DeviceSubscriptionChanged;
       push.OnChannelCreated += ChannelCreated;
       push.OnChannelDestroyed += ChannelDestroyed;
       foreach (var entry in IOS)
           {
               string dev = entry.Device_Id.ToString();
               string load = entry.Push_Payload.ToString();
               int count = entry.Unread_Count;
              var appleCert = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../productionfile.p12"));
               push.RegisterAppleService(new ApplePushChannelSettings(true, appleCert, "password")); //Extension method
                     push.QueueNotification(new AppleNotification()
                                          .ForDeviceToken(dev)
                                          .WithAlert(load)
                                          .WithBadge(count));
                  }

   }

邮件已成功发送,但我遇到的问题是 1.尝试在成功发送消息时检索响应,或者失败,失败原因等......这些是pushsharp代码中的委托,以便我可以将响应记录到我们的数据库中。为了澄清......我需要知道错误响应来自哪个条目尝试(deviceID)。由于数据未链接到任何特定的deviceid传递尝试,因此我无法通知来自通知发布的代理的生成的消息。 2.我还希望能够保持pushsharp代码不受修改和调用我的代码中的方法,以便在将来对pushsharp代码进行任何更新时减少合并问题。 有什么建议? 如果有人可以给我任何关于如何使用响应事件和代理来检索每个通知发送尝试的信息的示例,我将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:5)

我没有得到任何回复,但通过进一步的研究,我能够解决我的问题,失败的成功,并能够成功发送没有错误的通知。解决方案是重新生成我的证书。由于我使用Windows服务器作为推送通知服务器以下步骤将指导您从Windows服务器生成APNs证书。 如果您已从Mac OS X工作站生成证书,则可以跳过此步骤 部分并将您的证书上传到推送通知服务器。

第1步 - 生成证书签名请求(CSR) 1.转到开始&gt;管理工具&gt; Internet信息服务(IIS)管理器,并选择 服务器名称。 2.双击“服务器证书”。

注意:本文档中的IIS服务器版本为7.0。

  1. 从右侧的“操作”窗格中,单击“创建证书申请”。申请证书 向导出现。

  2. 在“可分辨名称属性”窗口中,键入以下内容: •Common Name - 与Apple Developer帐户关联的名称 •组织 - 您组织/公司的合法注册名称 •组织单位 - 组织内部门的名称 •城市/地区 - 您的组织所在的城市 •州/省 - 您的组织所在的州或省 •国家/地区 - 贵组织所在的国家或地区

  3. 单击“下一步”。将显示“加密服务提供程序属性”窗口。

  4. 在加密服务提供程序中选择Microsoft RSA SChannel加密提供程序 字段和位长度字段中的2048,然后单击“下一步”。

  5. 选择要保存证书申请文件的位置。一定要记住 文件名和保存文件的位置。

  6. 单击“完成”。您现在已经创建了CSR请求,并准备将其上传到Apple 开发门户网站 步骤2-将CSR上传到Apple开发门户并生成 APNs证书 步骤3-下载并安装APNs证书

  7. 单击“下载”将.cer文件保存到您的计算机。

  8. 将.cer证书文件复制到您创建的 证书申请文件。

  9. 转到开始&gt;管理工具&gt; Internet信息服务(IIS)管理器,选择 服务器名称,然后双击“服务器证书”
  10. 从右侧的“操作”窗格中,单击“完成证书申请”。完整的 出现证书申请向导。

  11. 选择从Apple Developer Portal下载的.cer证书文件,然后键入 友好名称字段中的应用程序名称(例如com.xxxx.xxxxx)。

  12. 提示:友好名称不是证书本身的一部分,而是由服务器使用 管理员可以轻松区分证书。 6.选择确定。证书将安装在服务器上。 7.确认您的Apple Production Push Services证书出现在服务器证书上 列表。

    一个。如果您可以看到证书,请按照以下步骤导出证书并将其上载到 推送通知服务器。 8.右键单击“服务器证书”列表中的证书,然后单击“导出”。

    1. 选择要保存文件的位置,选择导出密码,然后选择 单击确定。 (导出为.pfx)
    2. 提示:如果您只能选择保存为.cer文件而不是.pfx,那么您不是 正确导出证书。确保选择了要导出的正确文件。如果您仍然无法选择导出为.pfx,请转到下面的步骤B. 注意:请务必记住密码,或将密码保存在安全的地方。密码会 将证书上载到推送通知服务器时需要。 完成所有这些步骤后,您应该具有以下项目: •APNs证书(.pfx格式,不是.cer格式) •导出证书时设置的密码 现在,您已准备好将证书上载到推送通知服务器(如果您尚未在该服务器上)。

      B中。如果您不能在服务器证书UI中看到如上所示的证书,或者没有从该UI导出为.pfx的选项,请按照以下步骤导出证书并将其上载到推送通知服务器。 8。转到Microsoft Managenment控制台 9.在“开始”菜单上,单击“运行”,键入MMC,然后单击“确定”。 Microsoft管理控制台将打开一个空控制台(或管理工具),如下面的图1所示。在添加一些管理单元之前,空控制台没有管理功能。 Microsoft Management Console窗口顶部菜单栏上的MMC菜单命令适用于整个控制台。

      1. 单击文件 - >打开并选择Console1.msc并打开

      2. 右键单击要导出的证书,选择All Tasks-&gt;导出

      3. 在“证书导出向导”上单击“下一步”

      4. 选择是,导出私钥
      5. 警告:请勿选择删除私钥
      6. 选择,个人信息交换 - PKCS#12(.PFX),如果默认情况下尚未选择。
      7. 浏览到.cer驻留在您计算机上的位置
        1. 选择要保存文件的位置,选择导出密码,然后单击“确定”。 (导出为.pfx)
      8. 转到导出的.pfx文件,并将扩展名重命名为.p12。

      9. 将文件放在安装了推送通知引擎的根目录中(例如C:\或D:)