• Send push notification on Apple (APNS) on c#.net


    原文: http://apns-c-sharp-net-vikram-jain.blogspot.com

    =======================
    Please, Install your certificate *.p12 on pc, and take firend name use here for refernce.
    Please, set configuration file :
    
     <appSettings>
     <add key="FriendName" value="Apple Production IOS Push Services: com.ABC.XYZ"/>
        <add key="ProductionKeyFriendName" value="Production"/>   
      </appSettings>
    ==============
    Send, push as per below in your class to call apns class:
       Cls_APNS _Cls_APNS = new class_apns();
      //Here pass custom fiels as per seprated by ";" ann asssigb value by "key=value;key=value"
       _Cls_APNS.PushMessage("Message","DeviceToken",0,"id=12;name=ABC");
    ==================
    Please create a class as per below (class_apns.cs). :
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Net.Security;
    using System.Net.Sockets;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Configuration;
    using System.Data;
    using System.Security.Authentication;
    using System.IO;
    
    namespace Push.Class
    {
        public class class_apns
        {
            String CertificateName = "";
            String CertificatePwd = "";
            String FriendName = "Apple Development IOS Push Services: com.ABC.XYZ";
            String ProductionKeyFriendName = "Production";
            SslStream sslStream;     
    
            public Cls_APNS()
            {                 
                FriendName = ConfigurationManager.AppSettings["FriendName"].ToString();
                ProductionKeyFriendName = ConfigurationManager.AppSettings["ProductionKeyFriendName"].ToString();        
            }
    
            public bool ConnectToAPNS()
            {
                X509Certificate2Collection certs = new X509Certificate2Collection();
    
                // Add the Apple cert to our collection
                certs.Add(getServerCert());
    
                // Apple development server address
                string apsHost;
    
                if (getServerCert().ToString().Contains(ProductionKeyFriendName))
                    apsHost = "gateway.push.apple.com";
                else
                    apsHost = "gateway.sandbox.push.apple.com";
    
                // Create a TCP socket connection to the Apple server on port 2195
                TcpClient tcpClient = new TcpClient(apsHost, 2195);
    
                // Create a new SSL stream over the connection
                sslStream = new SslStream(tcpClient.GetStream());
    
                // Authenticate using the Apple cert
                sslStream.AuthenticateAsClient(apsHost, certs, SslProtocols.Default, false);
    
                //PushMessage();
    
                return true;
            }
    
            private X509Certificate getServerCert()
            {
                X509Certificate test = new X509Certificate();
    
                //Open the cert store on local machine        
                X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    
                if (store != null)
                {
                    // store exists, so open it and search through the certs for the Apple Cert        
                    store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
                    X509Certificate2Collection certs = store.Certificates;
    
                    if (certs.Count > 0)
                    {
                        int i;
                        for (i = 0; i < certs.Count; i++)
                        {
                            X509Certificate2 cert = certs[i];
    
                            if (cert.FriendlyName.Contains(FriendName))
                            {
                                //Cert found, so return it.
                                return certs[i];
                            }
                        }
                    }
                    return test;
                }
                return test;
            }
    
            private  byte[] HexToData(string hexString)
            {
                if (hexString == null)
                    return null;
    
                if (hexString.Length % 2 == 1)
                    hexString = '0' + hexString; // Up to you whether to pad the first or last byte
    
                byte[] data = new byte[hexString.Length / 2];
    
                for (int i = 0; i < data.Length; i++)
                    data[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
    
                return data;
            }
    
            public bool PushMessage(string Mess, string DeviceToken, int Badge, string Custom_Field)
            {              
                ConnectToAPNS();     
                List<string> Key_Value_Custom_Field = new List<string>();
                String cToken = DeviceToken;
                String cAlert = Mess;
                int iBadge = Badge;
    
                // Ready to create the push notification
                byte[] buf = new byte[256];
                MemoryStream ms = new MemoryStream();
                BinaryWriter bw = new BinaryWriter(ms);
                bw.Write(new byte[] { 0, 0, 32 });
    
                byte[] deviceToken = HexToData(cToken);
                bw.Write(deviceToken);
    
                bw.Write((byte)0);
    
                // Create the APNS payload - new.caf is an audio file saved in the application bundle on the device
                string msg = "";       
               msg = "{"aps":{"alert":"" + cAlert + "","badge":"" + iBadge.ToString() + "","sound":"noti.aiff"}";
            
                String PayloadMess = "";
                if (string.IsNullOrWhiteSpace(Custom_Field) == false)
                {
                    List<string> list_Custom_Field = Custom_Field.Split(';').ToList();
    
                    if (list_Custom_Field.Count > 0)
                    {
                        for (int indx = 0; indx < list_Custom_Field.Count; indx++)
                        {
                            Key_Value_Custom_Field = list_Custom_Field[indx].Split('=').ToList();
                            if (Key_Value_Custom_Field.Count > 1)
                            {
                                if (PayloadMess != "") PayloadMess += ", ";                        
                                PayloadMess += """ + Key_Value_Custom_Field[0].ToString() + "":"" + Key_Value_Custom_Field[1].ToString() + """;
                            }
                        }
                    }
                }
    
                if (PayloadMess != "")
                {
                    msg += ", " + PayloadMess;
                }
                msg += "}";
    
                // Write the data out to the stream
                bw.Write((byte)msg.Length);
                bw.Write(msg.ToCharArray());
                bw.Flush();
    
                if (sslStream != null)
                {
                    sslStream.Write(ms.ToArray());
                    return true;
                }
    
                return false;
            }   
     
        }
    }
    
  • 相关阅读:
    Tomcat 调优的技巧
    双亲委派模型
    字典树实现
    Python获取房价信息和导出EXCEL
    日志检索关键字并截取上下行关联内容
    GC日志分析
    Linux 查看 删除进程
    Rotate partitions in DB2 on z
    C++ STL string
    DB2 for z: system catalog tables
  • 原文地址:https://www.cnblogs.com/walkerwang/p/5185256.html
Copyright © 2020-2023  润新知