Яблочное пуш-уведомление с резким APNS

Я использую библиотеку APNS Sharp для своего push-уведомления Apple. Я опустил отсюда. Я использую пример тестовой программы, предоставленной библиотекой APNS Sharp без каких-либо изменений.
он просто не отправляет никаких уведомлений, пока я не поставлю точку останова в этой строке кода. если я поставлю точку останова. Я просто отлично работаю. Это ожидаемое поведение или я делаю что-то не так. а также я не получаю никаких исключений. спасибо за любую помощь. вот код

static void Main(string[] args)
{
    bool sandbox = true;
    string testDeviceToken = "Token";
    string p12File = "apn_developer_identity.p12";
    string p12FilePassword = "yourpassword";
    int sleepBetweenNotifications = 15000;
    string p12Filename = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, p12File);
    NotificationService service = new NotificationService(sandbox, p12Filename, p12FilePassword, 1);
    service.SendRetries = 5; 
    service.ReconnectDelay = 5000; //5 seconds
    service.Error += new NotificationService.OnError(service_Error);
    service.NotificationTooLong += new NotificationService.OnNotificationTooLong(service_NotificationTooLong);
    service.BadDeviceToken += new NotificationService.OnBadDeviceToken(service_BadDeviceToken);
    service.NotificationFailed += new NotificationService.OnNotificationFailed(service_NotificationFailed);
    service.NotificationSuccess += new NotificationService.OnNotificationSuccess(service_NotificationSuccess);
    service.Connecting += new NotificationService.OnConnecting(service_Connecting);
    service.Connected += new NotificationService.OnConnected(service_Connected);
    service.Disconnected += new NotificationService.OnDisconnected(service_Disconnected);
    Notification alertNotification = new Notification(testDeviceToken);
    alertNotification.Payload.Alert.Body = "Testing {0}...";
    alertNotification.Payload.Sound = "default";
    alertNotification.Payload.Badge = i;
    if (service.QueueNotification(alertNotification))
      Console.WriteLine("Notification Queued!");
    else
      Console.WriteLine("Notification Failed to be Queued!");
    Console.WriteLine("Cleaning Up...");

    service.Close();// if i dont put a break point in here, it simply does not send any notification

    service.Dispose();

}

я надеюсь, что мой вопрос ясен...
Обновление: я застрял здесь. Пожалуйста, любой может мне помочь.

2 ответа

Решение

Я обнаружил проблему. это была ошибка в рабочем потоке потока библиотеки APNS SHARP.

РЕДАКТИРОВАТЬ:
я вызываю этот метод после постановки всех уведомлений в очередь.
лайк
service.start();
а вот метод

     public void Send()
    {
        foreach (NotificationConnection conn in this.notificationConnections)
        {
           // Console.Write("Start Sending");
            conn.start(P12File, P12FilePassword);
        }
    }

Я тоже это вижу. Глядя на метод NotificationConnection.Close(), я нашел это:

// здесь, чтобы предотвратить состояние гонки //, когда уведомление может быть поставлено в очередь, пока рабочий поток // спит после своего цикла, но если мы установим значение true закрытия в течение этих 100 мс, // уведомления в очереди в течение этого времени будут не удаляется из очереди, поскольку цикл // завершится из-за закрытия = true; // 250 мс должно быть достаточно времени, чтобы цикл исключил все оставшиеся уведомления // после того, как мы прекратили принимать выше Thread.Sleep(250);

И в упомянутом цикле я нашел: Thread.Sleep(500);

Установка времени ожидания в методе close на 1000 исправила это для меня;) - ответ от:http://code.google.com/p/apns-sharp/issues/detail? Id=41

Другие вопросы по тегам