2

アプリでsを使用UILocalNotificationしています。繰り返し通知をスケジュールすることもあれば、非繰り返し通知をスケジュールすることもあります。通知が発生するたびに、アプリのバッジ番号を増やしたいと思います。だから私はlocalNotification.applicationIconBadgeNumber = badgeNumber;これをうまくやっています...通知が繰り返し通知である場合を除いて、以前にバッジ番号1で繰り返し通知を設定した場合は、バッジ番号2で別の非繰り返し通知を設定しました。

フローは次のとおりです。

Notification 1 fires (first time) - Badge number = 1 (OK!) 
Notification 2 fires              - Badge number = 2 (OK!) 
Notification 1 fires (repeating)  - Badge number = 1 (ERROR)

通知1が再度発生したときに理解できるように、アプリのバッジ番号に2を表示したい(2つの通知を逃した場合)。この動作を実現できる可能性はありますか?それとも私が見逃した明らかな何かがありますか?私にとって、繰り返し通知のより論理的なバッジの動作は、初めてバッジ番号を設定し、その後はバッジ番号を変更しないというものです。

4

4 に答える 4

1

通知が繰り返されることに対処し、最初に起動されたときにアプリのバッジ番号をインクリメントする唯一の方法は、次のようにバッジ番号なしで繰り返し通知をスケジュールすることだと思います。

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:60];
localNotification.alertBody = @"1";
localNotification.alertAction = @"Send";
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.repeatInterval = NSMinuteCalendarUnit;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

そして、繰り返し通知が初めて発生すると同時に、アプリのバッジ番号のみを設定する通知をスケジュールします。

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:60];
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.applicationIconBadgeNumber = 1;
localNotification.hasAction = NO;
localNotification.alertBody = nil;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
于 2013-01-09T20:40:37.183 に答える
1

シンプル: ごめんなさい、デイブ。私はそれができないのではないかと心配しています。

UILocalNotification. _

バッジの数は、通知をスケジュールするときに設定した値に常に設定されます (ご存知のとおり)。ユーザーが通知を受け取るたびにアプリケーションを開くと想定することはできないため、アプリの起動ごとに既にスケジュールされている通知 (繰り返される通知と繰り返されない通知) のバッジ数を更新しても確実には機能せず、選択肢にもなりません。

代わりにプッシュ通知を使用する唯一の方法は、サーバー上のすべての「未読」通知を追跡し、ユーザーがアプリを起動するとすぐにサーバー上で通知を「既読」としてマークすることです。

于 2013-01-09T19:28:41.873 に答える
0

私のアプリでは、繰り返しローカル通知を使用してバッジ番号を追加する必要がありました。また、ユーザーがアプリのバッジ番号を開くたびにリセットする必要があります。その結果、すべてのスケジュールされた通知はバッジ番号を再計算する必要があります。

func applicationDidEnterBackground(application: UIApplication) {
    addBadgeNumberToScheduledNotifications()
}

func addBadgeNumberToScheduledNotifications() {
    var badgeNumber: Int = 0
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0
    if let notifications = UIApplication.sharedApplication().scheduledLocalNotifications {
        UIApplication.sharedApplication().cancelAllLocalNotifications()
        for notification in notifications {
            notification.applicationIconBadgeNumber = notification.fireDate > NSDate() ? ++badgeNumber : 0
            UIApplication.sharedApplication().scheduleLocalNotification(notification)
        }
    }
}
于 2016-02-10T11:33:35.353 に答える
0

次のようなif条件を使用して簡単に実行できます。

- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)localNotification
{
   if([UIApplication sharedApplication].applicationIconBadgeNumber < localNotification.applicationIconBadgeNumber)
   {
      [UIApplication sharedApplication].applicationIconBadgeNumber = localNotification.applicationIconBadgeNumber;
   }
}

(上記のコードをチェックしませんでした)。

于 2013-01-09T18:36:49.637 に答える