web-dev-qa-db-ja.com

プッシュ通知バッジiPhoneを増やす

通知の受信時にバッジの値を増やすことは可能ですか? ORペイロードとしてカウントを送信する必要がありますか?

毎回バッジ値を「1」として送信している場合、アプリが開いていない場合にアプリのアイコンのバッジ値をどのようにインクリメントできますか。

このコードを使用しましたが、機能しません。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + 1; 
}
41
user825841

通常、すべてのアプリで未読の通知カウントはサーバーで維持されます。サーバーが特定のデバイストークンにプッシュ通知を送信すると、バッジカウントとペイロードが送信されます。デバイスに通知され、アプリがバックグラウンド(または強制終了)になると、OSはバッジカウントをアプリアイコンに自動的に更新します。アプリを実行しているかどうかにかかわらず、

application:didReceiveRemoteNotification:

委任すると、(NSDictionary *)userInfoからバッジカウントを受け取ることができます。そのため、次の機能を使用してアプリアイコンのバッジカウントを更新できます。

[UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue];

これがあなたの役に立つと思います。

52
Mathew Varghese

アプリケーションが開いていない場合、ペイロード以外からバッジを増やすことはできません。

13

アプリケーションがバックグラウンドモードであるときにプッシュ通知が送信され、バッジ番号をインクリメントしたい場合は、サーバーにbadgeCountを送信して、サーバーが現在のカウントを認識できるようにする必要があります。

サーバー側からバッジカウントを管理する場合、このコードで十分です。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  {
    NSLog(@"remote notification: %@",[userInfo description]);

    if (userInfo) {
        NSLog(@"%@",userInfo);

        if ([userInfo objectForKey:@"aps"]) { 
            if([[userInfo objectForKey:@"aps"] objectForKey:@"badgecount"]) {
                [UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue];
            }
        }
    }
}
5
Deepesh

Urban Airshipは、 this の「自動バッジ」機能の使用をサポートしています。

3
Matt Frear

アプリを開いたときにリモート通知を受信した後、

以下のコードを使用して、Appdelegateファイルの「didBecomeActive」メソッドで現在のバッジ番号を取得します。

int badgeCount = [UIApplication sharedApplication].applicationIconBadgeNumber;
    badgeCount = badgeCount + 1;
0
nidIOS