处理苹果推送通知的iphone应用程序的应用程序徽章编号

时间:2013-07-30 10:18:13

标签: push-notification badge

我正在从服务器端向apns服务器发送通知,我在处理徽章时遇到一个小问题,如果用户在通知中心看到通知,我的徽章号码应该减少,如果应用已经运行,则不需要徽章我这么认为,但我的徽章编号总是“1”

从我的服务器端我发送徽章=“1”。如何通知服务器我的应用程序有特定的徽章编号,如何知道我的徽章编号。

        - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
     {
 NSLog(@"%@",userInfo);
UIApplicationState state = [application applicationState];
[[UIApplication sharedApplication]setApplicationIconBadgeNumber:1];
if (state == UIApplicationStateActive) {
    [[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];





    NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@""
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles: nil];
    [alertView show];
    [alertView release];

}

}

1 个答案:

答案 0 :(得分:1)

通常在所有应用中,未读通知计数都在服务器中维护。当服务器向特定设备发送推送通知时,令牌服务器会将徽章计数与有效负载一起发送。

您的服务器逻辑需要跟踪正确的徽章计数并正确发送。

{
    "aps" :  
    {
        "alert" : "Your notification message",
        "badge" : badgecount ,
        "sound" : "bingbong.aiff"
    }
}

代替您的代码[[UIApplication sharedApplication]setApplicationIconBadgeNumber:1]; 使用

badge_value+=[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"]intValue];
    [UIApplication sharedApplication].applicationIconBadgeNumber = badge_value;

其中,badge_value是一个存储徽章值的整数。