2014-02-14 2 views
11

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

  1. я нажимаю на push-баннер уведомлений, мои приложения выходят на передний план и вызывается didReceiveRemoteNotification.

  2. Я нажимаю на значок своего приложения с трамплина, мое приложение выходит на передний план и doReceiveRemoteNotification НЕ вызывается.

Таким образом, в сценарии 1, я могу обновить свой счетчик непрочитанных сообщений внутри приложения в ответ на didReceiveRemoteNotification. В сценарии 2 я не могу.

Как решить эту проблему с помощью Quickblox?

+1

Вы могли решить эту проблему? – Nameet

+0

Вы решили эту проблему? – AnshaD

+0

@MarioFrade I обновил прокси-ответ с новым документом, и ваша проблема - это ожидаемое поведение. – onmyway133

ответ

3

В качестве одного из возможных вариантов:

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
    if (userInfo) { 
     [self handleRemoteNotifications:userInfo]; 
    } 

    // Override point for customization after application launch. 
    return YES; 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    [self handleRemoteNotifications:userInfo]; 
} 

#pragma mark - Remote notifications handling 

-(void)handleRemoteNotifications:(NSDictionary *)userInfo { 
    // do your stuff 
} 

@end 
+0

didFinishLaunchingWithOptions не вызывается, когда приложение было в фоновом режиме и не было убито, и я использую значок для запуска приложения. – sheetal

+0

didReceiveRemoteNotification: в этом случае следует вызывать – frankWhite

+0

Привет, @sheetal, у меня есть похожий сценарий, но требуется небольшое изменение, например, когда я получаю push-уведомление, приложение должно быть активным в фоновом режиме и выполнять задание, указанное в (например, код обновления местоположения пользователя), - (void) приложение : (UIApplication *) приложение didReceiveRemoteNotification: (NSDictionary *) userInfo, но мое приложение не активировалось или не вызывалось до тех пор, пока пользователь не назовет уведомление. так, как бы это сделать, когда приложение находится в фоновом режиме? доза, кто знает решение для этого? – Moxarth

1

Вы должны включить удаленное оповещение в режимах фона.

Для этого автоматически: (Xcode5)

- Go to your Project settings -> Capabilities -> Background Modes 
- Tick "Remote Notifications" 

Чтобы сделать это, вручную:

- Open your %appname%-Info.plist 
- Right click and tick "Show Raw Keys/Values" 
- Right click and choose "Add Row" 
- Type in "UIBackgroundModes" (Key) 
- The key will be created, and the type is an Array 
- Add new item in the array with the value of "remote-notification" (Value) and press enter 
- Now you have 1 item in your array called: "Item 0", if you had any other items in there, just add this item (remote-notification) to the array. 

Обязательно использовать эти методы frankWhite использовали :)

Надеется, что это помогает ;)

+4

У меня есть аналогичная проблема. Это не решило проблему. – Nameet

+0

Из документов: «Приложения, использующие push-уведомления для уведомления пользователя о том, что новый контент доступен, могут получать контент в фоновом режиме. Для поддержки этого режима включите ключ UIBackgroundModes со значением удаленного уведомления в файле Info.plist вашего приложения. Вы также должны реализовать приложение: didReceiveRemoteNotification: fetchCompletionHandler: метод в вашем делете приложения. «Поэтому я не думаю, что это актуально в целом. – mxcl

2

Вопрос, вероятно, заключается в том, что application:didReceiveRemoteNotification: не вызывается, если t он не работает. Цитирую компании Apple документации:

Этот документ устарел

Если приложение не работает, когда приходит толчок уведомление, метод запускает приложение и предоставляет соответствующую информацию в словаре параметров запуска. Приложение не вызывает этот метод для обработки этого push-уведомления. Вместо этого ваша реализация приложения: willFinishLaunchingWithOptions: или application: didFinishLaunchingWithOptions: метод должен получать данные полезной нагрузки push-сообщения и отвечать соответствующим образом.

Это новый документ

Используйте этот метод для обработки входящих удаленных уведомлений для вашего приложения. В отличие от приложения: метод didReceiveRemoteNotification: метод, который вызывается только тогда, когда ваше приложение работает на переднем плане, система вызывает этот метод, когда ваше приложение работает на переднем плане или в фоновом режиме. Кроме того, если вы включили фоновый режим удаленных уведомлений, система запускает ваше приложение (или пробуждает его из приостановленного состояния) и помещает его в фоновое состояние при поступлении удаленного уведомления. Однако система не запускает ваше приложение автоматически, если у пользователя есть принудительное завершение. В этой ситуации пользователь должен перезапустить приложение или перезапустить устройство до того, как система снова попытается запустить приложение автоматически.

+2

и didFinishLaunchingWithOptions: вы можете использовать этот код для полезной нагрузки получить толчок в: NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

+0

@proxi это документы кажется устаревшими – onmyway133

+0

привет, у меня есть подобный сценарий, но немного модификация требуется, например, когда я получаю уведомление толчка, приложение должно получить активен в фоновом режиме и выполняет задание, указанное в (например, код обновления местоположения пользователя), - (void) приложение: (UIApplication *) приложение didReceiveRemoteNotification: (NSDictionary *) userInfo, но мое приложение не активизировалось до тех пор, пока пользователь не закроет уведомление , так, как бы это сделать, когда приложение находится в фоновом режиме? доза, кто знает решение для этого? – Moxarth

2

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{  
    NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

NSString *myKey = [userInfo objectForKey:@"myKeyFromPayload"]; 
    } 

Не забудьте установить разрешение в PLIST

Для удаленной форсированной вы можете использовать в your appdelegate:

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

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

  • Нет связанных вопросов^_^