以前帖子的附加信息(完整registerUserNotificationSettings
):
Apple 为注册通知和使用徽章制作了新的 API。
请参阅 WWDC 2014 会议视频、文本版本
和文档。
用户可以在“设置”中更改每个UIUserNotificationType
( UIUserNotificationTypeBadge
, UIUserNotificationTypeSound
, UIUserNotificationTypeAlert
) 的权限。
在更改徽章之前,您必须检查权限。
我的 AppDelegate 中的代码示例:
#ifdef __IPHONE_8_0
- (BOOL)checkNotificationType:(UIUserNotificationType)type
{
UIUserNotificationSettings *currentSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
return (currentSettings.types & type);
}
#endif
- (void)setApplicationBadgeNumber:(NSInteger)badgeNumber
{
UIApplication *application = [UIApplication sharedApplication];
#ifdef __IPHONE_8_0
// compile with Xcode 6 or higher (iOS SDK >= 8.0)
if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
{
application.applicationIconBadgeNumber = badgeNumber;
}
else
{
if ([self checkNotificationType:UIUserNotificationTypeBadge])
{
NSLog(@"badge number changed to %d", badgeNumber);
application.applicationIconBadgeNumber = badgeNumber;
}
else
NSLog(@"access denied for UIUserNotificationTypeBadge");
}
#else
// compile with Xcode 5 (iOS SDK < 8.0)
application.applicationIconBadgeNumber = badgeNumber;
#endif
}
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
该CurrentUserNotificationSettings
方法在 UI 应用程序实例中可用,并将为您提供最新的用户通知首选项。
使用徽章编号:
[self setApplicationBadgeNumber:0];
代替
application.applicationIconBadgeNumber = 0;
PS:#ifdef __IPHONE_8_0
由于需要在 Xcode5 和 Xcode6 中构建,因此在编译时检查( )。如果你没有这个需求,可以简化代码。