Вы должны сделать несколько вещей, чтобы управлять полученным push-уведомлением, когда приложение находится в фоновом режиме.
Во-первых, на стороне вашего сервера вы должны установить {"aps":{"content-available" : 1... / $body['aps']['content-available'] =1;
в полезной нагрузке push-уведомления.
Во-вторых, в вашем проекте Xcode вам нужно настроить «удаленные уведомления». Это делается путем перехода к цели проекта -> возможности, затем включите переключатель возможностей и установите флажок удаленных уведомлений.
В-третьих, вместо использования didReceiveRemoteNotification
вы должны вызывать application:didReceiveRemoteNotification:fetchCompletionHandler:
, это позволит вам выполнять нужные вам задачи в фоновом режиме, в момент получения уведомления:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
if(application.applicationState == UIApplicationStateInactive) {
NSLog(@"Inactive - the user has tapped in the notification when app was closed or in background");
//do some tasks
[self manageRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
else if (application.applicationState == UIApplicationStateBackground) {
NSLog(@"application Background - notification has arrived when app was in background");
NSString* contentAvailable = [NSString stringWithFormat:@"%@", [[userInfo valueForKey:@"aps"] valueForKey:@"content-available"]];
if([contentAvailable isEqualToString:@"1"]) {
// do tasks
[self manageRemoteNotification:userInfo];
NSLog(@"content-available is equal to 1");
completionHandler(UIBackgroundFetchResultNewData);
}
}
else {
NSLog(@"application Active - notication has arrived while app was opened");
//Show an in-app banner
//do tasks
[self manageRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
}
Наконец, вы должны добавить этот тип уведомления: UIRemoteNotificationTypeNewsstandContentAvailability
в настройки уведомлений, когда вы его устанавливаете.
Кроме того, если ваше приложение было закрыто, когда пришло уведомление, вы должны управлять этим в didFinishLaunchingWithOptions
, и только если пользователь нажимает на push-уведомление: способ сделать это:
if (launchOptions != nil)
{
NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
[self manageRemoteNotification:dictionary];
}
}
launchOptions имеет значение != nil, когда вы запускаете приложение, нажимая на push-уведомление, если вы получаете к нему доступ, нажимая на значок, launchOptions будет == nil.
Я надеюсь, что это будет полезно. Здесь это объясняется Apple.
person
AlbertoC
schedule
15.01.2016