如何在irse的parse.com上获取当前安装的徽章值?

时间:2014-05-13 10:26:20

标签: ios objective-c push-notification parse-platform badge

我正在使用parse.com在设备之间发送推送通知。

我发送带徽章增量值的推送消息1.打开应用程序后,徽章值将设置为零。所有上述功能都运行良好。但是,我无法获得当前安装的徽章值。

根据documentation,按照以下代码将当前安装徽章设置为零,

- (void)applicationDidBecomeActive:(UIApplication *)application {
  PFInstallation *currentInstallation = [PFInstallation currentInstallation];
  if (currentInstallation.badge != 0) {
     currentInstallation.badge = 0;
      [currentInstallation saveEventually];
  }
  // ...   
}

但是,在我的应用中,currentInstallation.badge在收到消息后打开应用时为零。即,我需要直接将currentInstallation.badge值设置为零,而不检查当前徽章值,如下所示

- (void)applicationDidBecomeActive:(UIApplication *)application {
  PFInstallation *currentInstallation = [PFInstallation currentInstallation];
  //if (currentInstallation.badge != 0) {
     currentInstallation.badge = 0;
     [currentInstallation saveEventually];
  // }
  // ...
}

工作正常。但是,凭借该徽章价值,我需要在我的应用程序中执行一些其他任务。

为什么徽章值对我来说是零?我错过了什么?

1 个答案:

答案 0 :(得分:1)

PFInstallation.badge返回已保存到数据库的徽章的最后一个值。 它在您的情况下返回零,因为该对象尚未从服务器刷新。

有两种方法可以获得徽章价值,然后再将其杀死:

解决方案#1 (从UIApplication获取徽章值)

NSUInteger badgeValue = [UIApplication sharedApplication].applicationIconBadgeNumber;

PFInstallation *installation = [PFInstallation currentInstallation];
installation.badge = 0;
[installation saveEventually];
NSLog(@"%d", (int)badgeValue);

解决方案#2 (刷新PF安装)

PFInstallation *installation = [PFInstallation currentInstallation];
[installation fetchInBackgroundWithBlock:^(PFInstallation *object, NSError *error) {
    NSUInteger badgeValue = installation.badge;
    installation.badge = 0;
    [installation saveEventually];
    NSLog(@"%d", (int)badgeValue);
}];