1. ホーム
  2. objective-c

[解決済み] iOSアプリ:通知を消去するには?

2022-11-09 15:42:46

質問

iOS アプリケーションで、いくつかの Push 通知を送信しています。問題は、メッセージや通知がタップされた後、iOS の通知センターに残ってしまうことです。次にアプリケーションを開いたときに、通知センターで私のアプリケーションの通知を削除するにはどうしたらよいでしょうか。

私は、人々が以下を呼び出している投稿に出会いました。 setApplicationIconBadgeNumber をゼロ値で呼び出して、通知をクリアしている投稿を見つけました。それは私には非常に奇妙に思えるので、たぶん別の解決策が存在すると信じています。

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

は、通知センターからアプリのすべての通知を消去することに失敗することはありません。