2016-08-03 10 views
0

Kann keinen Weg finden, dies zu tun, aber wie ich sah, können viele Apps dies tun. Es ist sehr oft, dass ich in der Skype-App bemerkt habe, wenn ich auf dem Sperrbildschirm eine Benachrichtigung sehe, aber in der Benachrichtigungszentrale werden keine Benachrichtigungen im Verlauf angezeigt. Umgekehrt sehe ich keine Benachrichtigungen auf dem Sperrbildschirm, aber ich sehe sie in der Benachrichtigungszentrale.Kann eine lokale Benachrichtigung nicht im Verlauf angezeigt werden, wenn sich die App im Hintergrund befindet?

Wenn App-Status auf einem Vordergrund, ja ich kann sie durch diesen Code in AppDelegate Datei verhindern:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 
    if (application.applicationState == UIApplicationStateActive) { 
     [[UIApplication sharedApplication] cancelLocalNotification:notification]; 
    } 
} 

Aber diese Methode aufgerufen, wenn der Benutzer der Interaktion mit Benachrichtigung im Hintergrund, und zu diesem Zeitpunkt Benachrichtigung ist bereits in der Mitte.

Also irgendwelche Vorschläge? Danke.

+0

soll eine lokale Benachrichtigung generiert werden, wenn die App beendet wird oder im Hintergrund läuft? –

+0

@balkaransingh, nein. Benutzer sperren Gerät, app feine Arbeit im Hintergrund, nach einer Aktion, App lokale Benachrichtigung generieren, dann gefeuert es. –

Antwort

0

Sie können wie tun,

if (application.applicationState == UIApplicationStateInactive) { 
    [[UIApplication sharedApplication] cancelLocalNotification:notification]; 
} 

//or 

if (application.applicationState == UIApplicationStateBackground) { 
    [[UIApplication sharedApplication] cancelLocalNotification:notification]; 
} 

in gleicher didReceiveLocalNotification Methode !!

+1

'didReceiveLocalNotification:' nicht aufgerufen wenn App im Hintergrund! Nur nachdem Benutzer Folie auf diese Benachrichtigung öffnen –

+0

haben Sie versucht, inaktiv? – Lion

+0

Es hat keinen Sinn, Delegate-Methode nicht in diesem Moment aufgerufen –

0

Ich wollte den Ansatz testen und entschied mich, die UILocalNotification mit Hilfe einer dispatch_after zu stornieren. Hier ist der Code:

UILocalNotification *theLocalNotification = [UILocalNotification new]; 
theLocalNotification.fireDate = [NSDate dateWithTimeInterval:10 sinceDate:[NSDate new]]; 
theLocalNotification.alertBody = @"test"; 
[[UIApplication sharedApplication] scheduleLocalNotification:theLocalNotification]; 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(12 * NSEC_PER_SEC)), dispatch_get_main_queue(),^
       { 
        [[UIApplication sharedApplication] cancelLocalNotification:theLocalNotification]; 
       }); 

// the below lines are needed so that `dispatch_after` runs when app is in background 
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:5]; 
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; 

Es erfolgreich ist Aufhebungs UILocalNotification aber es stellt sich heraus, dass cancelLocalNotification: Methode, um die Benachrichtigung von entfernt sowohl Lock Screen und Geschichte Bildschirm. Deshalb schauen wir nicht einmal in die richtige Richtung, es sollte eine andere Möglichkeit geben, die Sache zu machen.

Verwandte Themen