2013-08-02 2 views
2

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

ответ

2

Когда приложение находится на переднем плане, t появится в панели уведомлений. Полезная нагрузка уведомления передается методу application:didReceiveRemoteNotification:, где вы можете игнорировать его, если это то, что вы хотите.

Когда приложение запускается в фоновом режиме при поступлении уведомления, при открытии приложения также вызывается application:didReceiveRemoteNotification:. Вы можете различить эти два случая со следующим кодом:

-(void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    if([app applicationState] == UIApplicationStateInactive) 
    { 
     //application was running in the background 
    } 
} 

Когда вы открываете приложение, нажав на уведомление, полезная нагрузка уведомление передается другим способом, называется application:didFinishLaunchingWithOptions:, где вы можете справиться с этим.

+0

но я нашел, что он передан в приложение: didReceiveRemoteNotification: метод всегда. –

+0

Я нашел, что он передан в приложение: didReceiveRemoteNotification: метод всегда, когда приложение находится в фоновом режиме. но после того, как я убью процесс, полезная нагрузка передается в приложение: didFinishLaunchingWithOptions: method..so, у моего вопроса до сих пор нет ответа. –

+0

@MarcoLee См. Мой обновленный ответ. – Eran

0

Я предпочитаю эту комбинацию. Без функции, которую я добавил в didFinishLaunchingWithOptions, уведомления не будут глубоко связываться по логике, содержащейся в didReceiveRemoteNotification, когда приложение сначала запускается в память из уведомления.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    // All your nice startup code 

    // ... 

    // Hook for notifications 
    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) { 
     [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]]; 
    } 
} 

Оба они находятся в вашем AppDelegate, кстати.

- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo { 

    if (application.applicationState == UIApplicationStateActive) { 
     return; 
    } 

    // Do anything you want with the notification, such as deep linking 

    // ... 
}