一.Apns简介:

Apns是苹果推送通知服务。

二.原理:

APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备);
然后,将服务器的信息接收并且保存在APNs当中,APNs从其中注册的列表中查找该IOS设备(设备可以为iPhone、iPad、iPod Touch,版本是iOS3.0及以上)并将信息发送到该设备;

Provider与APNS之间要建立连接,APNS和Device之间也要建立连接,这两个连接都是加密的,采用的TLS的方式,加密用的证书需要生成的,这个证书分两种,一种是“开发者证书”,使用开发者证书的APP可以发布在APPSTORE上面,另一种是“企业证书”,使用企业证书的APP只能发在企业内部市场,不能发在APPSTORE上。

三.使用.NET开源类库PushSharp向苹果APNS服务推送消息。

下载PushSharp开源项目编译  https://github.com/Redth/PushSharp

编译成功后进行APNS推送需要使用 Newtonsoft.Json.dll ,PushSharp.Apple.dll ,PushSharp.Core.dll 三个程序集库文件

然后需要ios端提供 .p12的证书文件以及证书文件的加密密码

准备好这些后新建控制台程序引用上面的库文件,将证书复制到根目录改变属性输出到复制目录为始终复制

 class Program
    {
        static ApnsConfiguration config;
        static ApnsServiceBroker apnsBroker;
        static void Main(string[] args)
        {
            config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, "证书.p12", "证书加密密码");
            apnsBroker = new ApnsServiceBroker(config);
            //推送异常
            apnsBroker.OnNotificationFailed += (notification, aggregateEx) =>
            {
                aggregateEx.Handle(ex =>
                {
                    //判断例外,进行诊断
                    if (ex is ApnsNotificationException)
                    {
                        var notificationException = (ApnsNotificationException)ex;
                        //处理失败的通知
                        var apnsNotification = notificationException.Notification;
                        var statusCode = notificationException.ErrorStatusCode;
                        Console.WriteLine("Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}" + notification.DeviceToken);
                    }
                    else
                    {
                        //内部异常
                        Console.WriteLine("Apple Notification Failed for some unknown reason : {ex.InnerException}" + notification.DeviceToken);
                    }
                    // 标记为处理
                    return true;
                });
            };
            //推送成功
            apnsBroker.OnNotificationSucceeded += (notification) =>
            {
                Console.WriteLine("Apple Notification Sent ! "+notification.DeviceToken);
            };
            //启动代理
            apnsBroker.Start();
        }

        /// <summary>
        /// 推送消息
        /// </summary>
        public static void SendMsg()
        {
            List<string> MY_DEVICE_TOKENS = new List<string>() {
                "1f6f37acad29348c6a5957529c9fa61ad69766ec9c7367948745899cbccdfd51",
                "1f6f37acad29348c6a5957529c9fa61ad69766ec9c7367948745899cbccdfd51"
            };

            foreach (var deviceToken in MY_DEVICE_TOKENS)
            {
                // 队列发送一个通知
                apnsBroker.QueueNotification(new ApnsNotification
                {
                    DeviceToken = deviceToken,//这里的deviceToken是ios端获取后传递到数据库统一记录管理的,有效的Token才能保证推送成功
                    Payload = JObject.Parse("{\"aps\":{\"sound\":\"default\",\"badge\":\"1\",\"alert\":\"这是一条群发广告消息推送的测试消息\"}}")
                });
            }

            //停止代理
            apnsBroker.Stop();
            Console.Read();
        }
    }

上面实现了.NET向APNS苹果消息推送通知的功能,这只是一个例子,在实际项目开发中,需要同IOS端进行交流,例如用户下载IOS应用后的token什么时候记录到数据库,如何进行管理,如何向所有用户和单个用户进行消息推送和避免消息的重复推送,可以开发成一个代理服务,实现相应的接口给推送方调用,类似激光推送的接口调用,做到统一化管理。

吐槽一下向Android设备推送消息,Android不像苹果APNS的推送有着统一的通道,也没有向APNS服务统一管理着设备的Token,一些Android手机系统的开发商,例如小米和华为会有自己开发的统一通道进行推送管理,类似苹果的APNS推送服务,但是如果要自己的应用能够在所有Android设备上收到推送到消息,不使用第三方推送去自己开发一个推送服务,就需要你的推送代理服务一直与该设备保持长链接,这些链接的管理是非常头疼的一件事,例如在wifi局域网和234G网络下的出现的掉线重连等等,以及如何使用消耗最少的流量保持设备和推送代理的长连接,都是高难度的挑战。在做好通道建立和管理后才是消息的推送和管理。

.NET向APNS苹果消息推送通知的更多相关文章

  1. APNS IOS 消息推送

    一.Apns简介: Apns是苹果推送通知服务. 二.原理: APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备):然后,将服务器的信息接收并且 ...

  2. PHP 苹果消息推送

    /* * 苹果消息推送方法 * $deviceToken 苹果设备token * $message 消息内容 */ function iosmsg_send($deviceToken,$message ...

  3. .net C# 苹果消息推送 工具类

    public class AppleAPNSMessage { /// <summary> /// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样) /// </sum ...

  4. How Javascript works (Javascript工作原理) (九) 网页消息推送通知机制

    个人总结: 1.介绍了网页消息推送通知机制 全文地址:https://github.com/Troland/how-javascript-works 这是 JavaScript 工作原理的第九章. 现 ...

  5. Push:iOS基于APNS的消息推送

    1. Push的三个步骤,如下图所示: (1)Push服务应用程序把要发送的消息.目的iPhone的标识打包,发给APNS: (2)APNS在自身的已注册Push服务的iPhone列表中,查找有相应标 ...

  6. APNS IOS 消息推送处理失效的Token

    在开发苹果推送服务时候,要合理的控制ios设备的Token,而这个Token是由苹果服务器Apns产生的,就是每次app问Apns要Token,由苹果服务器产生的Token会记录到Apns里面,我们需 ...

  7. vue中使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt ...

  8. 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]

    在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能 ...

  9. APNS IOS 消息推送沙盒模式和发布模式

    在做.NET向IOS设备的App进行消息推送时候,采用的是PushSharp开源类库进行消息的推送,而在开发过程中,采用的是测试版本的app,使用的是测试的p12证书采用的是ApnsConfigura ...

随机推荐

  1. [转]HTTP请求模型和头信息

    原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html 目录 一.连接至Web服务器 二.发送HTTP请求 三.服务端接受请求 ...

  2. 【转】mac/linux终端光标的快捷键操作

    摘自网络:原标题是类似linux/unix命令行终端的光标及字符控制快捷键的东东. 常用的快捷键: Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处 ...

  3. 配置ST3在浏览器中打开

    打开Preferences - 「Key Bindings - User」,添加此行: {"keys": ["f1"],"command": ...

  4. Windows下Git安装指南

    参考<Git权威指南>安装整理,图书配套网址参见[1] 1. Cygwin下安装配置Git 1. 在Windows下安装配置Git有2种不同的方案 (1)msysGit, (2)Cygwi ...

  5. Sass for循环中编译%时报错解决方案

    sass功能强大,特别是支持for循环,节省大量开发时间,但是在开发时遇到一个问题,直接使用%时没有问题,当有变量时再加% 单位在编译时报错: 这样没有问题: @for $width from 0 t ...

  6. Careercup 论坛上较有意思的题目整理

    # 数据结构类 ### 线段树 segment tree http://www.careercup.com/question?id=5165570324430848 找区间内的value的个数 二维线 ...

  7. 开发BI系统时的需求分析研究

    我们知道MIS,知道ERP,知道GIS等等,这些系统在管理限制上有很多的冲突,管理和被管理,开放和限制等等,然而BI在开始就不是这样的.BI要求的就是易用还要易于扩展,首先是报表,这个是你无条件的需要 ...

  8. 【原】Configuring Oracle Data Guard In Physical Standby Database

    作者:david_zhang@sh [转载时请以超链接形式标明文章] http://www.cnblogs.com/david-zhang-index/p/5042640.html参照文档:https ...

  9. HTML5[7]: 实现网页版的加载更多

    理所当然,jQuery出场: $(function() { $(window).scroll(function() { if($(this).scrollTop() + $(this).innerHe ...

  10. 基于MSP430F413水果电池供电的低功耗时钟

      我最早接触MSP430时候,看到书的第一页就是一张水果电池的图片,一直以来想做一个低功耗的可以水果电池供电的系统,毕业之后的下半年选择MSP430F413单片机来画了一个低功耗的板子,一直没有调试 ...