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

use*_*999 1 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));
                  }

   }
Run Code Online (Sandbox Code Playgroud)

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

use*_*999 5

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

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

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

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

  2. 在"专有名称属性"窗口中,键入以下内容:•通用名称 - 与Apple开发人员帐户关联的名称•组织 - 组织/公司的合法注册名称•组织单位 - 组织内部门的名称•城市/地点 - 您的组织所在的城市•州/省 - 您的组织所在的州或省•国家/地区 - 您的组织所在的国家或地区

  3. 点击下一步.出现"加密服务提供程序属性"窗口.

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

  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证书文件,然后在Friendly name字段中键入应用程序的名称(例如com.xxxx.xxxxx).

提示:友好名称不是证书本身的一部分,但服务器管理员使用它来轻松区分证书.6.选择确定.证书将安装在服务器上.7.确认您的Apple Production Push Services证书显示在"服务器证书"列表中.

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

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

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

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

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

  2. 右键单击要导出的证书,选择All Tasks-> Export

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

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

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