【问题标题】:Increment the Push notification Badge iPhone增加推送通知徽章 iPhone
【发布时间】:2012-06-24 14:25:26
【问题描述】:

是否可以在收到通知时增加徽章值。或者我应该将计数作为有效负载发送吗?

如果我每次都将徽章值发送为“1”,如果应用程序未打开,我如何增加应用程序图标中的徽章值。

我用过这段代码,但不起作用。

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

【问题讨论】:

  • 您可以将新计数作为有效负载发送,以确保应用程序在后台和前台显示正确的计数

标签: iphone objective-c xcode push-notification


【解决方案1】:

通常在所有应用程序中,未读通知计数都保存在服务器中。当服务器向特定设备令牌发送推送通知时,它们会连同有效负载一起发送徽章计数。一旦设备收到通知并且您的应用程序处于后台(或被终止),操作系统会自动将徽章计数更新为您的应用程序图标。如果您的应用程序是否正在运行,您将在

中收到通知
application:didReceiveRemoteNotification:

委托,因此您可以从 (NSDictionary *)userInfo 接收徽章计数。因此,您可以使用该功能更新应用图标徽章计数

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

认为这应该对您有所帮助。

【讨论】:

  • 从aps dict中获取徽章计数的关键不应该是@“badge”吗?见:developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/…
  • application:didReceiveRemoteNotification: 即使应用被杀死,这个方法也会被调用吗?
  • @Mathew Varghese,每个用户都会有不同的未读通知,通过在服务器端保持计数,徽章计数如何准确?
【解决方案2】:

如果应用程序未打开,您将无法增加徽章,除非从有效负载中。

【讨论】:

  • @Geek 你的代码不会被调用...因为你的应用没有运行
【解决方案3】:

当您的应用程序处于后台模式时出现推送通知并且您想要增加徽章编号时,您应该向服务器发送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];
            }
        }
    }
}

【讨论】:

  • 但是我如何将徽章计数发送到服务器??@elppa
  • @moosa,当服务器端 kbown 您的设备令牌和服务器通过您的设备令牌 ID 管理您的徽章计数时,服务器在您的设备中发送推送通知,我认为无需将徽章计数发送到服务器
  • 所以在payload中如果badge valur总是发送为1,如果没有打开它会在app中增加吗??
  • 不,当应用程序打开时增加
  • Deepesh,您应该检查您的答案,因为它有一些问题。例如。括号拼写错误,并且您正在将应用程序徽章编号分配给 [[[userInfo objectForKey:@"aps"] allKeys] containsObject:@"alert"] 的布尔值
【解决方案4】:

Urban Airship 使用其“自动徽章”功能支持 this

【讨论】:

  • 根据链接autobadge is an Urban Airship feature to track badge numbers in our servers,因此有效负载必须只包含一个比上一次推送大一的徽章编号。
  • 不。阅读链接 - 您可以发送“+1”,Urban Airship 会为您增加。
  • ...Urban Airship 在他们的服务器上为您维护计数,他们为您在有效负载中设置了徽章编号...不仅仅是“+1”有效负载(应该设置任何数字),推送通知没有任何“+1”徽章编号的概念,AFAIK。
【解决方案5】:

打开App收到远程通知后,

使用以下代码在您的 Appdelegate 文件的“didBecomeActive”方法中获取当前徽章编号:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多