程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .NET向APNS蘋果消息推送通知,.netapns蘋果通知

.NET向APNS蘋果消息推送通知,.netapns蘋果通知

編輯:C#入門知識

.NET向APNS蘋果消息推送通知,.netapns蘋果通知


一.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網絡下的出現的掉線重連等等,以及如何使用消耗最少的流量保持設備和推送代理的長連接,都是高難度的挑戰。在做好通道建立和管理後才是消息的推送和管理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved