DidReceiveRemoteNotification не вызывается, когда я нажимаю значок приложения после получения push-уведомления на фоне
Когда мое приложение находится на фоновом режиме, и я получаю удаленное уведомление, могут произойти две вещи:
-
Я нажимаю баннер push-уведомлений, мои приложения выходят на передний план и вызывается doReceiveRemoteNotification.
-
Я нажимаю значок своего приложения с трамплина, мое приложение выходит на передний план, а didReceiveRemoteNotification НЕ вызывается.
Итак, в сценарии 1 я могу обновить счетчик непрочитанных сообщений внутри приложения в ответ на didReceiveRemoteNotification.
В сценарии 2 я не могу.
Как я могу решить эту проблему с помощью Quickblox?
Ответы
Ответ 1
В качестве одного из возможных вариантов:
@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
Ответ 2
Вероятно, проблема заключается в том, что application:didReceiveRemoteNotification:
не вызывается, если приложение не запущено. Чтобы привести документацию Apple:
Этот документ устарел
Если приложение не запускается при поступлении push-уведомления, метод запускает приложение и предоставляет соответствующую информацию в словаре параметров запуска. Приложение не вызывает этот метод для обработки этого push-уведомления. Вместо этого ваша реализация приложения: willFinishLaunchingWithOptions: или application: didFinishLaunchingWithOptions: метод должен получать данные полезной нагрузки push-сообщения и отвечать соответствующим образом.
Это новый документ
Используйте этот метод для обработки входящих удаленных уведомлений для вашего приложения. В отличие от приложения: метод didReceiveRemoteNotification: метод, который вызывается только тогда, когда ваше приложение работает на переднем плане, система вызывает этот метод, когда ваше приложение работает на переднем плане или в фоновом режиме. Кроме того, если вы включили фоновый режим удаленных уведомлений, система запускает ваше приложение (или пробуждает его из приостановленного состояния) и помещает его в фоновое состояние при поступлении удаленного уведомления. Однако система не запускает ваше приложение автоматически, если у пользователя есть принудительное завершение. В этой ситуации пользователь должен перезапустить приложение или перезапустить устройство до того, как система снова запустит ваше приложение автоматически.
Ответ 3
Когда приложение не запущено, в файле didFinishLaunchingWithOptions: вы можете использовать этот код для получения полезной нагрузки push:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSString *myKey = [userInfo objectForKey:@"myKeyFromPayload"];
}
Не забудьте установить разрешение в plist
Для удаленного нажатия вы можете использовать в своем appdelegate:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
Ответ 4
Вы должны включить удаленные уведомления в фоновом режиме.
Для этого автоматически: (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 used:)
Надеюсь, что это поможет;)