HTTP / 2 ou Comment j'ai combattu les notifications PUSH sur iOS

Bonjour à tous. Récemment, mes projets ont cessé de recevoir des notifications push sur les appareils iOS. Après le processus de "recherche sur Google", il s'est avéré que les notifications push pour les "pommes" devraient maintenant être envoyées via le protocole 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.


      
      



Voici un exemple de requête via le protocole 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





.





Ensuite, il se connecte simplement à notre serveur via SSH. les clés d'accès vous seront envoyées par e-mail.





Entrez la commande pour lancer votre projet à partir du docker





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



après cette commande, votre projet sera disponible sur http: // server ipaddress /





Plus loin dans tous les projets, j'envoie simplement une demande de courrier à cette adresse avec un tableau de jetons de destinataire, d'en-tête et de message. Tout va et vient très vite.





PS Vous pouvez lier un nom de domaine dans les paramètres reg.ru.





Résultat

Pour le moment, tous les messages push se déclenchent normalement. Aucun problème avec un tel paquet n'a été trouvé. Il semble même que les notifications push disparaissent beaucoup plus rapidement qu'auparavant. J'espère que mon article aidera ceux qui ont été confrontés à un problème similaire.








All Articles