Яблочное пуш-уведомление с резким 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