HTTP / 2 o cómo luché contra las notificaciones PUSH en iOS

Hola a todos. Recientemente, mis proyectos dejaron de recibir notificaciones push en dispositivos iOS. Después del proceso de "búsqueda en Google", resultó que las notificaciones push para "manzanas" ahora deberían enviarse a través del protocolo http / 2.





HEADERS
  - END_STREAM
  + END_HEADERS
  :method = POST
  :scheme = https
  :path = /3/device/00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0
  host = api.development.push.apple.com
  authorization = bearer eyAia2lkIjogIjhZTDNHM1JSWDciIH0.eyAiaXNzIjogIkM4Nk5WOUpYM0QiLCAiaWF0I
 jogIjE0NTkxNDM1ODA2NTAiIH0.MEYCIQDzqyahmH1rz1s-LFNkylXEa2lZ_aOCX4daxxTZkVEGzwIhALvkClnx5m5eAT6
 Lxw7LZtEQcH6JENhJTMArwLf3sXwi
  apns-id = eabeae54-14a8-11e5-b60b-1697f925ec7b
  apns-expiration = 0
  apns-priority = 10
  apns-topic = <MyAppTopic>
DATA
  + END_STREAM
    { "aps" : { "alert" : "Hello" } }
Listing 8-3 shows a sample request constructed for a certificate that contains multiple topics.


      
      



A continuación se muestra un ejemplo de una solicitud a través del protocolo http / 2





. ASP.NET Framework IIS. Windows 2012R2. , HTTP/2 . - . . . "". ANDROID .





ASP.NET Core. ASP.NET Core Linux. Linux HTTP/2.





ASP.NET Core .





ASP.NET Core.





 public class dotAPNSService : IDisposable
    {
        public event EventHandler OnTokenExpiredHandler;
        private ApnsJwtOptions options = null;

        public dotAPNSService(string bundle)
        {
            options = new ApnsJwtOptions()
            {
                BundleId = bundle, //      com.org.test
                CertContent = "       ",//https://developer.apple.com/account/resources/authkeys/list
                KeyId = "  ",//https://developer.apple.com/account/resources/authkeys/list
                TeamId = "  "//https://developer.apple.com/account/resources/authkeys/list
            };
        }

        public void SendNotifications(String[] deviceTokens, String title, String body)
        {
            if (deviceTokens == null || deviceTokens.Length <= 0)
            {
                return;
            }

            if (String.IsNullOrEmpty(title))
            {
                return;
            }

            if (String.IsNullOrEmpty(body))
            {
                return;
            }

            // once you've gathered all the information needed and created an options instance, it's time to call
            var apns = ApnsClient.CreateUsingJwt(new HttpClient( ), options);

            // start the process     
            foreach (String deviceToken in deviceTokens)
            {
                var push = new ApplePush(ApplePushType.Alert)
                    .AddAlert(title, body)
                    .AddToken(deviceToken);

                Send(apns, push, deviceToken);
            }
        }
}
      
      



!!! . . .





NET.Core Docker. VPS REG.RU. VPS.





! . . . .













Visual Studio





.





Luego, simplemente se conecta a nuestro servidor a través de SSH. Las claves de acceso le serán enviadas por correo electrónico.





Ingrese el comando para iniciar su proyecto desde la ventana acoplable





docker run -d -p 80:80/tcp /
      
      



después de este comando, su proyecto estará disponible en http: // server ipaddress /





Además, en todos los proyectos, simplemente envío una solicitud de publicación a esta dirección con una serie de tokens de destinatario, encabezado y mensaje. Todo va y viene súper rápido.





PD: Puede vincular un nombre de dominio en la configuración de reg.ru.





Salir

Por el momento, todos los mensajes push se activan con normalidad. No se encontraron problemas con un paquete de este tipo. Incluso parece que las notificaciones push desaparecen mucho más rápido de lo que funcionaban antes. Espero que mi artículo ayude a quienes enfrentaron un problema similar.








All Articles