PushSharp отправляет уведомления на iOS успешно, но не получено

Я использую последнюю версию PushSharp (4.0.10) для отправки уведомлений на устройства iOS и Android. Около 9 месяцев назад я проверил это, и, похоже, все работало нормально. Я попробовал то же приложение сегодня, и устройство (iPhone) больше не получает уведомления. Токен устройства был обновлен сегодня, поэтому он должен быть действительным. Событие apnsBroker.OnNotificationSucceeded запускается, но устройство так и не получает уведомление. Нет никаких исключений или любого другого типа обратной связи.

var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, "mycert.p12", "password");

        // Create a new broker
        var apnsBroker = new ApnsServiceBroker(config);

        // Wire up events
        apnsBroker.OnNotificationFailed += (notification, aggregateEx) =>
        {

            aggregateEx.Handle(ex =>
            {

                // See what kind of exception it was to further diagnose
                if (ex is ApnsNotificationException)
                {
                    var notificationException = (ApnsNotificationException)ex;

                    // Deal with the failed notification
                    var apnsNotification = notificationException.Notification;
                    var statusCode = notificationException.ErrorStatusCode;

                    Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}");

                }
                else
                {
                    // Inner exception might hold more useful information like an ApnsConnectionException           
                    Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}");
                }

                // Mark it as handled
                return true;
            });
        };

        apnsBroker.OnNotificationSucceeded += (notification) =>
        {
            Console.WriteLine("Apple Notification Sent!");
        };

        // Start the broker
        apnsBroker.Start();

        var payload = new Dictionary<string, object>();
        var aps = new Dictionary<string, object>();
        aps.Add("alert", GetAlert());
        aps.Add("badge", 1);
        aps.Add("sound", "chime.aiff");
        payload.Add("aps", aps);            
        payload.Add("data", "info");


        apnsBroker.QueueNotification(new ApnsNotification
        {
            DeviceToken = textBox1.Text,
            Payload = JObject.Parse( Newtonsoft.Json.JsonConvert.SerializeObject(payload))
        });

        apnsBroker.Stop();

person jbassking10    schedule 29.06.2017    source источник
comment
Вы обновляете токен на своем сервере, когда получаете новый токен от APN? В противном случае, вы кэшируете токен после его получения?   -  person Subramanian P    schedule 29.06.2017
comment
Я всегда обновляю токен, чтобы убедиться, что срок его действия не истек.   -  person jbassking10    schedule 29.06.2017
comment
Можете ли вы пройти код получения токена?   -  person Subramanian P    schedule 29.06.2017
comment
Похоже, проблема вызвана тем, что кто-то возился с приложением и заставлял его терять разрешения на уведомления.   -  person jbassking10    schedule 29.06.2017
comment
@ jbassking10, ты нашел какое-нибудь решение? Я испытываю точно такую ​​​​же проблему.   -  person Mr. Jay    schedule 04.05.2021
comment
@Mr.Jay Перед созданием приложения убедитесь, что вы назначили функцию push-уведомлений в Xcode.   -  person jbassking10    schedule 05.05.2021


Ответы (1)


Это рабочий пример. Установите Pushsharp и выполните этот код. Убедитесь, что у вас есть действительный токен устройства + сертификат + пароль сертификата.

private void SendIOSPushNotification()
{
    try
    {
         //Get Certificate
         var appleCert = System.IO.File.ReadAllBytes(Server.MapPath("~/App_Data/Certificates_new.p12"));

         // Configuration (NOTE: .pfx can also be used here)
         var config = new ApnsConfiguration(ApnsConfiguration.ApnsServer## Heading ##Environment.Sandbox, appleCert, "YourCertificatePassword");

         // Create a new broker
         var apnsBroker = new ApnsServiceBroker(config);

         // Wire up events
         apnsBroker.OnNotificationFailed += (notification, aggregateEx) =>
         {
             aggregateEx.Handle(ex =>
             {
                 // See what kind of exception it was to further diagnose
                 if (ex is ApnsNotificationException)
                 {
                     var notificationException = (ApnsNotificationException)ex;

                     // Deal with the failed notification
                     var apnsNotification = notificationException.Notification;
                     var statusCode = notificationException.ErrorStatusCode;

                     Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}");
                 }
                 else
                 {
                     // Inner exception might hold more useful information like an ApnsConnectionException          
                     Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}");
                 }
                 // Mark it as handled
                 return true;
             });
         };

         apnsBroker.OnNotificationSucceeded += (notification) =>
         {
             Console.WriteLine("Apple Notification Sent!");
         };

         var fbs = new FeedbackService(config);
         fbs.FeedbackReceived += (string deviceToken, DateTime timestamp) =>
         {
             lblResult.Text = deviceToken +" Expired";
             // Remove the deviceToken from your database
             // timestamp is the time the token was reported as expired
         };

         // Start Proccess 
         apnsBroker.Start();

         //Device Token
         //string _deviceToken = "8b5f6b908ae3d84a3a9778b1f5f40cc73b33fe2  ?    5431e41702cee6e90c599f1e3";
         string[] deviceTokens = "8b5f6b908ae3d84a3a9778b1f5f40cc73b33fe25431e41702cee6e90c599f1e3,0592798256a0d2f9e00ea366d5bd3595789fa0f551431f1d707cab76d933c25c".Split(',');

         foreach (string _deviceToken in deviceTokens)
         {
             apnsBroker.QueueNotification(new ApnsNotification
             {
                 DeviceToken = _deviceToken,
                 Payload = JObject.Parse(("{\"aps\":{\"badge\":1,\"sound\":\"oven.caf\",\"category\":\"NEW_MESSAGE_CATEGORY\",\"alert\":\"" + (txtMessage.Text.Trim() + "\"}}")))
             });
         }

         apnsBroker.Stop();
         //lblResult.Text = "Messages sent";
     }
     catch (Exception)
     {
         throw;
     }
}
person Kamran Athar Janweri    schedule 30.07.2017