Update Badge Count For Push Notifications in ios7

僤鯓⒐⒋嵵緔 提交于 2019-11-29 08:33:25

Usually in all apps, the unread notification counts are maintained in the server. When the server sends a push notification to a particular device token server sends the badge count along with the payload.

Your server logic needs to keep track of the proper badge count and send it appropriately.

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

EDIT

You have set badge count in didReceiveRemoteNotification method. before this method called appbadgeis set from pushnotification, so from server you have to set correct badge..

Solution:

so create some webservice send deviceToken and currentBadge in that webservice to store at server, and when next time you send push check the last badge value for the token, and send it.

You have to manage your server side when you send a notification to other user then from php side they set a counter to increment the badge & send the notification to other user after that when you open your app the badge is set to null like this :

- (void) applicationWillResignActive:(UIApplication *) application
{
    application.applicationIconBadgeNumber = 0;
}

& to receive the notification you set this code :

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{    
    NSLog(@"userInfo %@",userInfo);

    for (id key in userInfo)
    {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }

    [application setApplicationIconBadgeNumber:[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]];

    NSLog(@"Badge %d",[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]);

    NSString *message = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [alert show];
}

You have to do it from the server side. In my case I have done it through php and mysql. Here is my database

I have added a field badgecount and i increase the badge count every time i send the push to the device with this code

    $query = "SELECT badgecount FROM pushnotifications WHERE device_token = '{$device_token}'";
    $query = $this->db->query($query);
    $row = $query->row_array();
    $updatequery = "update pushnotifications set badgecount=badgecount+1 WHERE device_token ='{$device_token}'";
    $updatequery = $this->db->query($updatequery);
    $device = $device_token;
    $payload['aps'] = array('alert' => $pushmessage, 'badge' =>$row["badgecount"]+1, 'sound' => 'default');
    $payload = json_encode($payload); 

And I also make another api for making the badgcount 0 which is called in the

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

So when the notification is seen it is again zero in the server.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!