2016-09-26 3 views
0

Моя проблема в том, что приложение находится в фоновом режиме и уведомление приходит, и я открыл приложение с icon; приложение восстанавливает его, но я хочу обновить данные экрана в этом случае. Есть ли способ обновить данные в фоновом режиме при поступлении уведомления?iOS: Если приложение находится в фоновом режиме и прибывает местное уведомление; какой метод будет вызван автоматически?

Вот код, который я использую для решения этого дела:

ViewController.m код файла:

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(appIsComingFromBackground:) 
                name:UIApplicationDidBecomeActiveNotification 
                object:nil]; 
     // Do any additional setup after loading the view, typically from a nib. 
    } 
    - (void) appIsComingFromBackground:(NSNotification *) note { 
     // code 
     NSString *hasMessage = [[NSUserDefaults standardUserDefaults] objectForKey:@"alertmsg"]; 
     if([hasMessage length]!=0) 
     { 
      _labelText.text = hasMessage; 
      [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"alertmsg"]; 
     } 
     else{ 
      _labelText.text = @""; 
     } 
    } 

AppDelegate.m код файла:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 

    if (application.applicationState == UIApplicationStateActive) { 

    } 
    else if(application.applicationState == UIApplicationStateBackground || application.applicationState == UIApplicationStateInactive) 
    { 
     [[NSUserDefaults standardUserDefaults] setObject:notification.alertTitle forKey:@"alertmsg"]; 
    } 
    NSLog(@"Alert Message: %@", notification.alertTitle); 
    NSLog(@"Alert Body: %@", notification.alertBody); 
} 
+1

Если приложение приостановлено, то ни один из методов делегата приложения не вызываются, когда локальное оповещение показано. – Paulw11

+0

@ Paulw11, так что для решения этой проблемы нет решения? –

+0

Можно ли каким-либо образом обновить данные, если пользователь не открыл приложение извещения, но он открыт из значка? –

ответ

3

приложение не Бег

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

  • Отображение предупреждения или баннер

  • Badging значок приложения

  • Воспроизведение звука

Нажав кнопку действия уведомления, пользователи запустит приложение. В этом случае вызывается приложение: doneFinishLaunchingWithOptions: метод делегата приложения.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 

// Handle launching from a notification 
UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
if (locationNotification) { 
    // Set icon badge number to zero 
    application.applicationIconBadgeNumber = 0; 
} 

return YES; 
} 

Applicaton работает в Foreground

Если приложение работает в то время как уведомление доставлено, то оповещение не отображается на экране. Приложение автоматически вызывает приложение своего делегата: метод didReceiveLocalNotification:.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
UIApplicationState state = [application applicationState]; 
if (state == UIApplicationStateActive) { 

} 

// Request to reload table view data 
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:self]; 

// Set icon badge number to zero 
application.applicationIconBadgeNumber = 0; 
} 

приложение работает в фоновом режиме

приложение было запущено раньше, но пользователи переключиться на другое приложение. При запуске уведомления пользователи обычно видят предупреждающий баннер в верхней части экрана. Когда он будет использован, приложение будет выведено на передний план. Подобно тому, как приложение работает на переднем плане, приложение автоматически вызывает приложение своего делегата: метод didReceiveLocalNotification:.

+0

Да, вы правы, но проблема в том, что пользователь открывает приложение из значка, чем' приложение: didReceiveLocalNotification' не вызывается, и данные также не обновляются в этом случае , 'application: didReceiveLocalNotification' вызывается только при открытии приложения пользователем из баннера или уведомления. –

+0

@MuhammadUmair - см. Команду paul –

+0

см. Это https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html –

-1
In Appdelegate 

    - (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification 
{ 

if (application.applicationState == UIApplicationStateActive) { 

} 
else if(application.applicationState == UIApplicationStateBackground || application.applicationState == UIApplicationStateInactive) 
{ 
    // [[NSUserDefaults standardUserDefaults] setObject:notification.alertTitle forKey:@"alertmsg"]; 

[[NSNotificationCenter defaultCenter]postNotificationName:@"PushNotificationReceived" object:nil userInfo:userInfo]; 

} 
NSLog(@"Alert Message: %@", notification.alertTitle); 
NSLog(@"Alert Body: %@", notification.alertBody); 

} 


In view controller: 

-(void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(doChangesWhatdidYouWant:) name:@"PushNotificationReceived" object:nil]; 
} 

-(void)doChangesWhatdidYouWant:(NSNotification *)notification{ 
//Todo 
}