2012-02-07 1 views
2

Я работаю над одним iPhone-приложением, которое включает в себя push-уведомление. Как я видел во многих документах и ​​учебных пособиях он предлагает, чтобы зарегистрироваться для нажимного уведомления с вполучить push-уведомление, когда приложение не работает iPhone

application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

как следующее:

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge| UIRemoteNotificationTypeSound]; 

    ... 
} 

теперь вопрос, если приложение было не работает (даже в фон), когда наступает нажатие, он не может обработать push-сообщение, но если я снова использую push-сообщение из области уведомлений и снова обедаю приложение, я могу получить свое сообщение.

Что мне нужно сделать, чтобы мое приложение получило сообщение о толчке даже в первый раз?

+0

Как вы собираетесь отправить толчок к устройству, прежде чем вы зарегистрировались, получили ключ и послал его на сервер, хотя? – mattjgalloway

+0

Если приложение использовалось в прошлом, мой сервер будет отслеживать токены устройства, поэтому я могу отправить push, даже если он не разрушается в то время. Но теперь проблема в том, когда приложение запускается впервые. он пытается зарегистрироваться для уведомления, чтобы не обрабатывать уведомление. как я могу решить эту проблему? – shebelaw

+0

Повесить что? Я думаю, вы запутались. См. Ответ @ Warrenm. – mattjgalloway

ответ

6

Возможно, вы столкнетесь с понятием регистрации и получения уведомлений. Приложение не может получать push-уведомление до того, как метод registerForRemoteNotificationTypes: вызывается в первый раз, так как этот метод предоставляет токен, который используется для отправки push-уведомлений в первую очередь.

Итак, вы должны говорить о получении уведомлений в двух отдельных ситуациях, в которых они могут быть доставлены: при первом запуске приложения и во время выполнения программы.

Для обработки уведомлений первого типа вы должны проверить словарь options, отправленный на application:didFinishLaunchingWithOptions:. В следующем коде показано, как маршрутизировать уведомление, полученное при запуске, на метод делегата, который вызывается, когда появляется push-уведомление, когда приложение уже запущено.

Место это в application:didFinishLaunchingWithOptions: переопределение:

NSDictionary *pushNotificationPayload = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
if(pushNotificationPayload) { 
    [self application:application didReceiveRemoteNotification:pushNotificationPayload]; 
} 
+0

Да, это, вероятно, правильное решение, я проверю его. Спасибо Warrenm – shebelaw

+0

Да, это правильное решение, но что, если я хочу оповещение ('UIAlert', помещенный внутри метода' didReceiveRemoteNotification'), появится, когда пользователь нажмет значок приложения, а не push-уведомление! –

+0

Возможно, вам удастся опубликовать это как новый вопрос, а не как комментарий к ответу, которому больше года. – warrenm

Смежные вопросы