Проблема APNS с использованием APNS Sharp - первые несколько уведомлений не доставлены - PullRequest
1 голос
/ 31 августа 2011

Вот проблема, которая вызывает у меня настоящую головную боль.Мы разрабатываем кроссплатформенное приложение, в котором нам нужны Push-уведомления.У нас есть сервер, синхронизирующий каждое приложение, и если приложение не работает на одном устройстве, мы уведомляем последнее, если нам это нужно.Push отлично работает на другой платформе.

Странно то, что уведомления работают хорошо, если приложение было открыто недавно.Но через несколько часов сервер должен отправить как минимум два уведомления (если не больше), прежде чем я смогу получить одно на устройстве.Если приложение было открыто недавно, все слова в порядке.

Проблема может быть в следующем:
- На стороне сервера.наш серверный API находится в C #, и мы используем «APNS Sharp» для отправки уведомлений на серверы Apple.
- сторона Apple (скорее всего, я не догадываюсь)
- приложение для iphone.Но тогда, почему я получал один время от времени?Я также заметил, что иногда я получаю уведомление, но затем синий пузырь, который появляется на экране, исчезает через несколько секунд, а иногда даже сразу.Вот фрагмент моего кода в моем делегате приложения:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSLog(@"Registering for remote notifications"); 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
return YES;
}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

    NSString * tokenAsString = [[[[devToken description] 
                             stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
                            stringByReplacingOccurrencesOfString:@" " withString:@""] retain];
    [self sendToken:tokenAsString];
NSLog(@"enregistré");
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}

Следующая функция является моей собственной функцией для отправки токена устройства на наш сервер.Не нужно отображать это.
[self sendToken: tokenAsString];

Кто-нибудь когда-нибудь слышал о такой проблеме?Как вы думаете, основываясь на фрагменте кода, который может быть получен от приложения или серверов Apple?Должны ли мы ориентировать наш поиск больше на стороне сервера?

Большое спасибо.

Pierre

EDIT

Оказалось, что проблема с сервером.Apple рекомендует сохранять открытое подключение к своему серверу, чтобы ограничить количество запросов на подключение / отключение.Мы пытались открывать по одному каждый раз, и теперь он работает правильно.

1 Ответ

0 голосов
/ 03 августа 2012

Для тех, кому это может быть интересно, это проблема с сервером.Apple рекомендует держать соединение открытым, чтобы избежать слишком большого количества запросов на подключение.

Я не совсем уверен, как работает этот API, но вместо этого мы пытались открывать его время от времени (если не для каждого сообщения), и теперь он работает как шарм.Ничего не было не так в конфигурации в приложении выше.

Приветствия

...