[objective-c] iOS 애플리케이션 : 알림을 지우는 방법?

일부 푸시 알림이 전송되는 iOS 애플리케이션이 있습니다. 내 문제는 메시지 / 알림이 iOS의 알림 센터에 남아 있다는 것입니다. 다음에 애플리케이션이 열릴 때 알림 센터에서 애플리케이션에 대한 알림을 제거하려면 어떻게해야합니까?

사람들이 setApplicationIconBadgeNumber알림을 지우기 위해 0 값으로 전화 하는 게시물을 보았습니다. 그것은 나에게 매우 이상해 보이므로 다른 해결책이 존재할 수 있다고 생각합니까?

EDIT1 :

알림을 지우는 데 문제가 있습니다. 여기에서 내 코드를 참조하십시오.

- (void) clearNotifications {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            NSLog(@"Launched from push notification: %@", dictionary);

            [self clearNotifications];
        }
    }

    return YES;
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{    
    NSLog(@"Received notification: %@", userInfo);
    [self clearNotifications];
}

Xcode를 통해 앱을 실행하고 있습니다. 앱이 최소화되고 알림 센터의 알림을 사용하여 앱을 시작하면 로그 didReceiveRemoteNotification에서이 호출되고 중단 점을 사용하여 clearNotifications실행 되었음을 확인할 수 있습니다 . 그러나 여전히 알림은 알림 센터에서 멈 춥니 다. 왜?



답변

알림 센터가 비교적 새로운 기능이기 때문에 Apple은 알림을 지우는 데 완전히 새로운 패러다임을 추진하고 싶지는 않았습니다. 대신, 그들은 [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];상기 알림을 지우는 데 다목적으로 사용 되었습니다. 조금 이상해 보일 수 있으며, Apple은 향후이를 수행하는보다 직관적 인 방법을 제공 할 수 있지만 당분간은 공식적인 방법입니다.

나 자신은이 스 니펫을 사용합니다.

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

알림 센터에서 앱의 모든 알림을 지우는 데 실패하지 않습니다.


답변

pcperini의 답변을 확장하십시오. 그가 언급했듯이 application:didFinishLaunchingWithOptions:메서드에 다음 코드를 추가해야합니다 .

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

당신은 또한 다음의 배지를 감소 증가 할 필요가 application:didReceiveRemoteNotification:당신은 통지에게 메시지 센터를 눌러에서 사용자가 입력 할 때 앱되도록 메시지 센터에서 메시지를 삭제하려는 경우 방법 것 또한 분명, 즉;

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];


답변

또한 applicationDidBecomeActive에서 clearNotifications에 대한 호출을 추가하여 애플리케이션이 백그라운드에 있고 다시 돌아 오는 경우 알림도 지워지도록하는 것이 좋습니다.

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [self clearNotifications];
}


답변

iOS 10 업데이트 (Swift 3)

iOS 10 앱에서 모든 로컬 알림을 지우려면 다음 코드를 사용해야합니다.

import UserNotifications

...

if #available(iOS 10.0, *) {
    let center = UNUserNotificationCenter.current()
    center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled.
    center.removeAllDeliveredNotifications() // To remove all delivered notifications
} else {
    UIApplication.shared.cancelAllLocalNotifications()
}

이 코드는 iOS 10.x 및 모든 이전 버전의 iOS에 대한 로컬 알림 지우기를 처리합니다. import UserNotificationsiOS 10.x 코드 가 필요합니다 .


답변

대기중인 예약 된 로컬 알림이 있고 cancelAllLocalNotifications알림 센터에서 이전 알림을 지우는 데 사용하지 않으려 는 경우 다음을 수행 할 수도 있습니다.

[UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;

설정하면 scheduledLocalNotifications알림 센터의 이전 알림이 지워지고 자체로 설정하면 보류중인 로컬 알림이 유지됩니다.


답변

Swift에서는 AppDelegate에서 다음 코드를 사용하고 있습니다.

func applicationDidBecomeActive(application: UIApplication) {
    application.applicationIconBadgeNumber = 0
    application.cancelAllLocalNotifications()
}


답변

당신이 (내가 그랬던 것처럼) 그 반대를 궁금해 여기에 오 셨다면, 포스트가 당신을위한 것일 수 있습니다.

배지를 지 웠을 때 알림이 지워지는 이유를 알 수 없었습니다 … 배지를 수동으로 늘린 다음 사용자가 앱에 들어갈 때 지우고 싶습니다. 그렇다고 알림 센터를 정리할 이유가 없습니다. 여전히 이러한 알림을 보거나 조치를 취하기를 원할 수 있습니다.

운 좋게도 음수 1은 트릭을 수행합니다.

[UIApplication sharedApplication].applicationIconBadgeNumber = -1;