2016-08-03 7 views
0

これを行う方法はありませんが、多くのアプリがこれを行うことができます。ロック画面では通知が表示されるが、通知センターでは通知が履歴に表示されない場合、Skypeアプリで気づいたことがよくある。逆に、ロック画面の通知は表示されませんが、通知センターで表示されます。アプリがバックグラウンドにある場合、ローカル通知を履歴に表示させることはできますか?

アプリの状態がフォアグラウンドにある場合は、はい、私はAppDelegateファイルにこのコードによってそれらを防ぐことができます。

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

しかし、この方法では、バックグラウンドでの通知とするときのユーザインタラクションと呼ばれ、この時点で通知がすでにあります中心にある。

どのようなご提案ですか?どうも。

+0

アプリが強制終了されたときや背景があるときにローカル通知を生成したいですか? –

+0

@バルカンシン、ユーザロックデバイス、アプリはバックグラウンドで細かい作業、何らかのアクションの後、アプリはローカル通知を生成し、それを解雇します。 –

答えて

0

あなたは同じdidReceiveLocalNotification方法で

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

//or 

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

を行うことができます!

+1

'didReceiveLocalNotification:'はアプリをバックグラウンドで呼び出さない!この通知でユーザーがスライドを開いた後でのみ、 –

+0

あなたは非アクティブにしましたか? – Lion

+0

これは意味がありません。この時点でデリゲートメソッドは呼び出されません。 –

0

私はこのアプローチをテストしたかったので、dispatch_afterの助けを借りてUILocalNotificationを取り消すことを決めました。ここでは、コードは次のとおりです。

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]; 

それが正常UILocalNotificationをキャンセルしない、しかし、それはcancelLocalNotification:方法が両方ロック画面履歴画面からの通知を削除することが判明しました。したがって、我々は正しい方向を見ていなくても、そのことを行うための他の方法があるはずです。

関連する問題