6

Es scheint, jeder nutzt PushSharp zum Senden von Push-Benachrichtigungen an iOS-Geräte von C#. Aber diese Bibliothek hat eine Warteschlange, die sie verwendet, anstatt die Benachrichtigung direkt zu senden, was bedeutet, dass Sie einen Windows-Dienst oder etwas benötigen, um es ordnungsgemäß zu hosten (per eigener Dokumentation), was für mich übertrieben ist. Ich habe eine eingehende Webanforderung an meinen ASP.NET-Webdienst, und als Teil der Bearbeitung möchte ich sofort eine Pushbenachrichtigung senden. So einfach ist das.So senden APNS Push-Benachrichtigung (iOS) von C# ohne Warteschlange

Kann mir jemand sagen, wie man PushSharp benutzt, um einen sofort zu senden (seinen Warteschlangenmechanismus zu umgehen) oder wie man die Push-Benachrichtigung selbst sendet? Ich habe bereits den Code, der die JSON-Nachricht formuliert, aber ich weiß nicht, wie Sie die .p12-Datei auf die Anfrage anwenden. Ich kann keine Apple-Dokumentation dafür finden.

+0

Ich würde gerne wissen, wie das auch zu tun – MichaelMcCabe

+0

Ich fand die Dokumentation von Apple, wo sie sagen, es ist ein TCP-Binärkanal, der für längere Zeit offen gehalten werden muss, anstatt für nur eine Nachricht geöffnet. Ich schätze, Warteschlangen sind wichtig. Apple sagt, dass sie dich als DoS-Attacke blockieren werden, wenn du es nicht tust. –

Antwort

1

Ich habe viele Stunden damit verbracht, einen Weg zu finden, um Benachrichtigungen zu pushen, dann habe ich einen Code gefunden, der das für mich getan hat.

Zuerst stellen Sie sicher, dass Sie die Zertifikate korrekt installiert haben, hier ist ein Link, der Ihnen helfen wird. https://arashnorouzi.wordpress.com/2011/04/13/sending-apple-push-notifications-in-asp-net-%E2%80%93-part-3-apns-certificates-registration-on-windows/

Hier ist ein Code, den ich Push-Benachrichtigungen verwendet, um:

public static bool ConnectToAPNS(string deviceId, string message) 
    { 
     X509Certificate2Collection certs = new X509Certificate2Collection(); 

     // Add the Apple cert to our collection 
     certs.Add(getServerCert()); 

     // Apple development server address 
     string apsHost; 
     /* 
     if (getServerCert().ToString().Contains("Production")) 
      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 sslStream1 = new SslStream(tcpClient.GetStream()); 

     // Authenticate using the Apple cert 
     sslStream1.AuthenticateAsClient(apsHost, certs, SslProtocols.Default, false); 

     PushMessage(deviceId, message, sslStream1); 

     return true; 
    } 

private static X509Certificate getServerCert() 
    { 
     X509Certificate test = new X509Certificate(); 

     //Open the cert store on local machine 
     X509Store store = new X509Store(StoreLocation.CurrentUser); 

     if (store != null) 
     { 
      // store exists, so open it and search through the certs for the Apple Cert 
      store.Open(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("Apple Development IOS Push Services")) 
        { 
         //Cert found, so return it. 
         Console.WriteLine("Found It!"); 
         return certs[i]; 
        } 
       } 
      } 
      return test; 
     } 
     return test; 
    } 

private static 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; 
    } 

Beachten Sie, dass dieser Code für die Entwicklung Zertifikate "Apple-Entwicklung IOS-Push-Dienste" ist.