HTTP / 2 ou como eu lutei contra notificações PUSH no iOS

Olá a todos. Recentemente, meus projetos pararam de receber notificações push em dispositivos iOS. Após o processo de "pesquisa", descobriu-se que as notificações push para "maçãs" agora deveriam ser enviadas por meio do 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.


      
      



Aqui está um exemplo de uma solicitação sobre o 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





.





Em seguida, ele simplesmente se conecta ao nosso servidor via SSH. as chaves de acesso serão enviadas a você por e-mail.





Digite o comando para iniciar seu projeto no docker





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



após este comando seu projeto estará disponível em http: // server ipaddress /





Além disso, em todos os projetos, eu simplesmente envio uma solicitação de postagem para este endereço com uma série de tokens de destinatário, cabeçalho e mensagem. Tudo vai e vem super rápido.





PS Você pode vincular um nome de domínio nas configurações reg.ru.





Resultado

No momento, todas as mensagens push disparam normalmente. Nenhum problema com esse pacote foi encontrado. Parece até que as notificações push desaparecem muito mais rápido do que funcionava antes. Espero que meu artigo ajude aqueles que enfrentaram um problema semelhante.








All Articles