Уведомления iOS не отправляются с помощью PushSharp. Событие тоже не возникает

Я пытаюсь использовать PushSharp для отправки уведомлений на различные устройства. Мое приложение на стороне сервера регистрирует уведомления для отправки в таблицу в MSSQL, чтобы другое приложение (бот) обрабатывало эти уведомления и отправляло их на серверы Apple.

Я использую следующий код:

static DataEntities Entities;

    static void Main(string[] args)
    {

        Entities = new DataEntities();

        var appleCert = File.ReadAllBytes(Path.GetFullPath("My_Push_Notifications.p12"));
        PushBroker broker = new PushBroker();
        broker.RegisterAppleService(new PushSharp.Apple.ApplePushChannelSettings(false, appleCert, "XXXXX"));

        broker.OnChannelCreated += broker_OnChannelCreated;
        broker.OnChannelDestroyed += broker_OnChannelDestroyed;
        broker.OnChannelException += broker_OnChannelException;
        broker.OnNotificationRequeue += broker_OnNotificationRequeue;
        broker.OnServiceException += broker_OnServiceException;
        broker.OnNotificationSent += broker_OnNotificationSent;
        broker.OnNotificationFailed += broker_OnNotificationFailed;

        while (true)
        {
            var pendingNotifications = Entities.Notifications.Include("UserDevice").Where(n => n.Status == (byte)Constants.Notifications.Status.Pending);

            if (pendingNotifications.ToList().Count > 0)
            {
                Console.WriteLine("Pending notifications: {0}", pendingNotifications.Count());
            }
            else
                Console.WriteLine("No pending notifications");

            foreach (var notification in pendingNotifications)
            {
                broker.QueueNotification<AppleNotification>(new AppleNotification()
                    .ForDeviceToken(notification.UserDevice.DeviceID)
                    .WithAlert(notification.Text)
                    .WithTag(notification.NotificationID));

                notification.Status = (byte)Constants.Notifications.Status.Sending;
            }

            Entities.SaveChanges();

            Thread.Sleep(2000);
        }
    }

Как видите, я ставлю уведомления в очередь на PushBroker, но ни одно событие не вызывается, и устройство iOS ничего не получает. Я также пытался использовать «StopAllServices» до конца цикла, но ничего не меняется.

Как это возможно?

Спасибо.


person Umar Jamil    schedule 04.02.2014    source источник


Ответы (1)


Я решил это. PushSharp не вызывал события, потому что вам нужно добавить обработчики событий ДО того, как вы зарегистрируете службу Apple в брокере. Итак, правильный код:

    PushBroker broker = new PushBroker();
    broker.OnChannelCreated += broker_OnChannelCreated;
    broker.OnChannelDestroyed += broker_OnChannelDestroyed;
    broker.OnChannelException += broker_OnChannelException;
    broker.OnNotificationRequeue += broker_OnNotificationRequeue;
    broker.OnServiceException += broker_OnServiceException;
    broker.OnNotificationSent += broker_OnNotificationSent;
    broker.OnNotificationFailed += broker_OnNotificationFailed;
    // Now you can register the service.
    broker.RegisterAppleService(new PushSharp.Apple.ApplePushChannelSettings(false, appleCert, "XXXXX"));
person Umar Jamil    schedule 06.02.2014
comment
Кстати, это относится и к уведомлениям Android. Обработчики должны быть добавлены до регистрации службы GCM. - person c0r3yz; 28.01.2015
comment
Уведомлений и событий пока нет. Без исключений. Полная тишина. Даже после добавления обработчиков событий перед регистрацией службы. - person ilyabreev; 04.06.2015
comment
@ilyabreev, если вы следуете той же процедуре, что и другие пользователи, возможно, проблема кроется где-то еще в вашем коде. Вы уверены, что уведомления правильно поставлены в очередь? - person Umar Jamil; 04.06.2015