免费开源的iOS开发学习平台

远程消息推送:5-管理App的Badge(远程服务器方式)

目前,在第三方推送服务平台中,都已经加入了对Badge的远程管理功能,开发者无需管理用户当前的Badge具体数值,而是由第三方推送服务平台的服务器来记录Badge的变化情况,从而减少了代码编写量。

JPush中有关Badge的操作方法

以极光推送为例,Badge的数值保存在极光的服务器中,在其SDK中,提供了两个有关Badge的操作方法.

  • 设置JPush服务器(远程)中存储的Badge值
+ (BOOL)setBadge:(int)value;

示例:

[JPUSHService setBadge:10];
  • 清空JPush服务器中存储的badge值
+ (void)resetBadge;

发送推送消息

在发送推送消息时,我们可以设置或更新用户当前Badge的数值。

  • 直接显示推送消息中的badge数值

  • 在原有的badge数值上,执行+1或者+N操作

更新服务器中的Badge值

当用户点击推送消息进入App时,我们需要通知服务器更新当前的Badge值,例如,执行-1操作。

在推送消息中,极光推送服务器,会把当前的badge值传递过来,我们需要做如下操作:

  • 获取到当前的badge值
  • 执行减1操作后,把最新的badge值再更新到服务器上
//以iOS10为例:
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
    // Required
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    NSLog(@"%@",userInfo);
    
    //获取到当前的badge值
    NSNumber *badgeNumber = [[userInfo objectForKey:@"aps"] objectForKey:@"badge"];
    //执行减1操作后,把最新的badge值再更新到服务器上
    [JPUSHService setBadge:([badgeNumber intValue] - 1)];
    
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
    }
    completionHandler();  // 系统要求执行这个方法
}

运行结果: