1

我已经实现了一个 Windows 服务,它每 3 分钟运行一次,并轮询数据库以获取准备发送的通知。我将它们收集到一个列表中,确定它是 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 代码中的代表,以便我可以记录对我们数据库的响应。为了澄清......我需要知道错误响应来自哪个条目尝试(设备ID)。由于数据未链接到任何特定的 deviceid 传递尝试,因此我无法通过通知代理生成的消息来判断。2. 我还希望能够保持 pushsharp 代码不变,并从我的代码中调用方法,以减少将来对 pushsharp 代码进行任何更新时的合并问题。有什么建议么?如果有人可以给我任何关于如何使用响应事件和委托来检索每次通知发送尝试的信息的示例,我将不胜感激。谢谢你。

4

1 回答 1

5

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

步骤 1 - 生成证书签名请求 (CSR) 1. 转到开始 > 管理工具 > Internet 信息服务 (IIS) 管理器,然后选择服务器名称。2. 双击服务器证书。

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

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

  2. 在 Distinguished Name Properties 窗口中,键入以下内容: • Common Name — 与您的 Apple Developer 帐户关联的名称 • Organization — 您的组织/公司的合法注册名称 • Organizational unit — 您在组织内的部门名称 • City/ locality — 您的组织所在的城市 • 州/省 — 您的组织所在的州或省 • Country/region — 您的组织所在的国家或地区

  3. 点击下一步。出现加密服务提供者属性窗口。

  4. 在 Cryptographic service provider 字段中选择 Microsoft RSA SChannel Cryptographic Provider,在 Bit length 字段中选择 2048,然后单击 Next。

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

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

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

  8. 将 .cer 证书文件复制到您创建证书请求文件的同一台 Windows Server 计算机。

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

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

提示:友好名称不是证书本身的一部分,而是供服务器管理员用来轻松区分证书。6. 选择确定。证书将安装在服务器上。7. 验证您的 Apple 生产推送服务证书是否出现在服务器证书列表中。

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

  1. 选择要保存文件的位置,选择导出密码,然后单击“确定”。(导出为 .pfx)

提示:如果您只能选择另存为 .cer 文件而不是 .pfx,则说明您没有正确导出证书。确保您选择了正确的文件来导出。如果您仍然没有导出为 .pfx 的选项,请转到下面的步骤 B。注意:请务必记住密码,或将其保存在安全的地方。将证书上传到推送通知服务器时需要密码。完成所有这些步骤后,您应该拥有以下项目: • APNs 证书(.pfx 格式,而不是 .cer 格式) • 您在导出证书时设置的密码 如果您现在可以将证书上传到 Push Notification Server不在该服务器上。

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

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

  2. 右键单击要导出的证书选择所有任务-> 导出

  3. 单击证书导出向导上的下一步

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

  9. 将文件放在安装推送通知引擎的根目录中(例如 C:\ 或 D:)
于 2013-08-07T15:07:08.810 回答