亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#推送信息到APNs的方法

2020-01-24 01:52:59
字體:
來源:轉載
供稿:網友

本文實例講述了C#推送信息到APNs的方法。分享給大家供大家參考。具體實現方法如下:

class Program{  public static DateTime? Expiration { get; set; }  public static readonly DateTime DoNotStore = DateTime.MinValue;  private static readonly DateTime UNIX_EPOCH = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);  private static string DeviceToken = "273eeddaef02192cf4ba5b666453b258f2d2a1ad02f549105fd03fea789d809d";  public const int DEVICE_TOKEN_BINARY_SIZE = 32;  public const int DEVICE_TOKEN_STRING_SIZE = 64;  public const int MAX_PAYLOAD_SIZE = 256;  private static X509Certificate certificate;  private static X509CertificateCollection certificates;  static void Main(string[] args)  {   string hostIP = "gateway.sandbox.push.apple.com";//   int port = 2195;   string password = "ankejiaoyu";//   string certificatepath = "aps_developer_identity.p12";//bin/debug   string p12Filename = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, certificatepath);   certificate = new X509Certificate2(System.IO.File.ReadAllBytes(p12Filename), password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);   certificates = new X509CertificateCollection();   certificates.Add(certificate);   TcpClient apnsClient = new TcpClient();   apnsClient.Connect(hostIP, port);   SslStream apnsStream = new SslStream(apnsClient.GetStream(), false, new RemoteCertificateValidationCallback(validateServerCertificate), new LocalCertificateSelectionCallback(selectLocalCertificate));   try   {    //APNs已不支持SSL 3.0     apnsStream.AuthenticateAsClient(hostIP, certificates, System.Security.Authentication.SslProtocols.Tls, false);   }   catch (System.Security.Authentication.AuthenticationException ex)   {    Console.WriteLine("error+"+ex.Message);   }   if (!apnsStream.IsMutuallyAuthenticated)   {    Console.WriteLine("error:Ssl Stream Failed to Authenticate!");   }   if (!apnsStream.CanWrite)   {    Console.WriteLine("error:Ssl Stream is not Writable!");   }   Byte[] message = ToBytes();   apnsStream.Write(message);  }  public static byte[] ToBytes()  {   // Without reading the response which would make any identifier useful, it seems silly to   // expose the value in the object model, although that would be easy enough to do. For   // now we'll just use zero.   int identifier = 0;   byte[] identifierBytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(identifier));   // APNS will not store-and-forward a notification with no expiry, so set it one year in the future   // if the client does not provide it.   int expiryTimeStamp = -1;//過期時間戳   if (Expiration != DoNotStore)   {    //DateTime concreteExpireDateUtc = (Expiration ?? DateTime.UtcNow.AddMonths(1)).ToUniversalTime();    DateTime concreteExpireDateUtc = (Expiration ?? DateTime.UtcNow.AddSeconds(20)).ToUniversalTime();    TimeSpan epochTimeSpan = concreteExpireDateUtc - UNIX_EPOCH;    expiryTimeStamp = (int)epochTimeSpan.TotalSeconds;   }   byte[] expiry = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(expiryTimeStamp));   byte[] deviceToken = new byte[DeviceToken.Length / 2];   for (int i = 0; i < deviceToken.Length; i++)    deviceToken[i] = byte.Parse(DeviceToken.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);   if (deviceToken.Length != DEVICE_TOKEN_BINARY_SIZE)   {    Console.WriteLine("Device token length error!");   }   byte[] deviceTokenSize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(Convert.ToInt16(deviceToken.Length)));   string str = "{/"aps/":{/"alert/":/"這是測試消息??!/",/"badge/":1,/"sound/":/"anke.mp3/"}}";   byte[] payload = Encoding.UTF8.GetBytes(str);   byte[] payloadSize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(Convert.ToInt16(payload.Length)));   List<byte[]> notificationParts = new List<byte[]>();   //1 Command   notificationParts.Add(new byte[] { 0x01 }); // Enhanced notification format command   notificationParts.Add(identifierBytes);   notificationParts.Add(expiry);   notificationParts.Add(deviceTokenSize);   notificationParts.Add(deviceToken);   notificationParts.Add(payloadSize);   notificationParts.Add(payload);   return BuildBufferFrom(notificationParts);  }  private static byte[] BuildBufferFrom(IList<byte[]> bufferParts)  {   int bufferSize = 0;   for (int i = 0; i < bufferParts.Count; i++)    bufferSize += bufferParts[i].Length;   byte[] buffer = new byte[bufferSize];   int position = 0;   for (int i = 0; i < bufferParts.Count; i++)   {    byte[] part = bufferParts[i];    Buffer.BlockCopy(bufferParts[i], 0, buffer, position, part.Length);    position += part.Length;   }   return buffer;  }  private static bool validateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)  {   return true; // Dont care about server's cert  }  private static X509Certificate selectLocalCertificate(object sender, string targetHost, X509CertificateCollection localCertificates,   X509Certificate remoteCertificate, string[] acceptableIssuers)  {   return certificate;  }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av片永久免费网站| 欧美黑人又粗大| 91国内在线视频| 日韩国产欧美精品在线| 日韩精品一区二区三区第95| 国产99视频精品免视看7| 96精品久久久久中文字幕| 欧美疯狂性受xxxxx另类| 992tv成人免费影院| 性欧美长视频免费观看不卡| 91高潮精品免费porn| 国产精品久久久一区| 久久精视频免费在线久久完整在线看| 视频在线观看一区二区| 精品国产91久久久久久老师| 国产精品va在线| 在线精品高清中文字幕| 欧美成人免费在线观看| 亚洲国产高清福利视频| 国产精品扒开腿做| 久久国产精品网站| 日韩在线视频中文字幕| 精品国产31久久久久久| 亚洲欧美一区二区三区四区| 一本色道久久综合亚洲精品小说| 91九色视频导航| 亚洲第一视频在线观看| 成人福利视频在线观看| 伊人亚洲福利一区二区三区| 久久久久久这里只有精品| 亚洲自拍偷拍在线| 久久亚洲精品一区| 日本精品久久中文字幕佐佐木| 亚洲免费电影一区| 亚洲视屏在线播放| 992tv在线成人免费观看| 91久久久久久| 97福利一区二区| 国产精品免费一区二区三区都可以| 夜色77av精品影院| 精品欧美一区二区三区| 亚洲人成网站777色婷婷| 亚洲影视中文字幕| 茄子视频成人在线| 亚洲精品视频网上网址在线观看| 性色av香蕉一区二区| 欧美激情亚洲另类| 国模私拍一区二区三区| 欧美日本高清视频| 日韩av电影在线免费播放| 色婷婷亚洲mv天堂mv在影片| 国产美女久久精品香蕉69| 亚洲女人天堂视频| 国产成人精品电影久久久| 成人黄色av网| 亚洲国产精品一区二区三区| 国产午夜精品理论片a级探花| 亚洲色图狂野欧美| 日韩电影第一页| 91精品在线国产| 成人精品久久久| 欧美二区在线播放| 2025国产精品视频| 国产亚洲精品久久久久久牛牛| 欧美激情伊人电影| 日韩av在线资源| 国产综合在线观看视频| 亚洲精品久久久久久久久久久久久| 91免费在线视频| 欧美日韩美女在线观看| 日韩在线一区二区三区免费视频| 亚洲区中文字幕| 国产精品在线看| 国产69精品久久久| 福利一区福利二区微拍刺激| 欧美三级xxx| 久久精品一偷一偷国产| 久久综合伊人77777尤物| 久久久久久久电影一区| 国产精品成人免费电影| 日韩在线精品视频| 久久精品视频中文字幕| 亚洲精品福利免费在线观看| 亚洲欧美制服综合另类| 91九色蝌蚪国产| 久久影视电视剧免费网站| 亚洲免费伊人电影在线观看av| 亚洲欧洲在线视频| 欧美一区三区三区高中清蜜桃| 青青久久aⅴ北条麻妃| 国产玖玖精品视频| 欧美不卡视频一区发布| 欧美黄网免费在线观看| 丝袜情趣国产精品| 久久久国产精品视频| 国产精品一区二区久久久久| 亚洲欧洲视频在线| 91在线直播亚洲| 欧美孕妇孕交黑巨大网站| 国产精品揄拍一区二区| 伊人亚洲福利一区二区三区| 日韩高清免费观看| 91久久中文字幕| 成人高h视频在线| 国产亚洲美女精品久久久| 亚洲性生活视频| 欧美成人午夜影院| 亚洲精品福利免费在线观看| 国产日韩欧美在线视频观看| 亚洲性av在线| 欧美极品欧美精品欧美视频| 国模吧一区二区三区| 国内外成人免费激情在线视频网站| 国产精品亚洲一区二区三区| 欧美精品999| 中文字幕日韩专区| 亚洲自拍偷拍网址| 97国产精品人人爽人人做| 亚洲小视频在线观看| 亚洲人成网站999久久久综合| 国内精品久久久久| 国产欧美一区二区三区在线看| 精品久久久久久电影| 8050国产精品久久久久久| 欧美激情第1页| 日韩av成人在线| 欧美精品videossex88| 大伊人狠狠躁夜夜躁av一区| 亚洲永久免费观看| 伊人久久久久久久久久久久久| 久久这里只有精品视频首页| 亚洲人成在线免费观看| 日韩av中文字幕在线免费观看| 26uuu另类亚洲欧美日本一| 国产91色在线| 日韩免费av片在线观看| 一区二区三区天堂av| 欧美富婆性猛交| 成人av色在线观看| 91大神在线播放精品| 韩剧1988在线观看免费完整版| 欧美美女18p| 啊v视频在线一区二区三区| 亚洲一区中文字幕| 国产欧美在线播放| 久久99久久亚洲国产| 国产91色在线| 欧美老肥婆性猛交视频| 亚洲欧美在线一区| 久久影视电视剧免费网站| 日韩av在线播放资源| 亚洲精品久久在线| 91精品在线一区| 2018中文字幕一区二区三区| 国产欧美日韩视频| 欧美特级www| 欧美黑人xxx| 一本色道久久88综合日韩精品| 精品视频偷偷看在线观看| www.日韩免费| 91亚洲va在线va天堂va国| 日韩欧美高清在线视频| 97精品在线观看| 国产精品久久久久一区二区|