如何防止设置[NSApp dockTile] badgeLabel值不是由我的代码设置的?

时间:2014-05-20 19:25:02

标签: macos cocoa apple-push-notifications badge

我有推送通知,其中包含徽章,声音和提醒功能。 如果程序没有运行 - 一切都很好。但是当程序 运行时 - 我需要阻止所有不是由程序生成的声音,警报和徽章,因为我有一个与我的服务器的实时连接并在APNS向我发送通知之前接收所有事件mac设备。 我找到了隐藏警报的方法,但我找不到任何方法来接管dockTile的图标徽章。 如果我这样做:

-(void)application:(NSApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
  [[NSApp dockTile] setBadgeLabel:nil];
}

没有任何事情发生,APNS设置的徽章仍然存在。我在badgeLabel或dockTileNumber属性上尝试了KVO,如here所示,但observeValueForKeyPath:ofObject:change:context:永远不会被调用。 APNS如何设置badgeLabel?也许我做错了什么并且在程序运行时有正确的方法来禁用警报/声音/徽章?

1 个答案:

答案 0 :(得分:1)

由于我没有找到任何正确的解决方案,我将接受我的解决方法:

-(void)application:(NSApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    [application dockTile].badgeLabel = @" "; 
    [application dockTile].badgeLabel = @""; 
}

可能会通过NSUserNotificationCenterDelegate委托方法userNotificationCenter:shouldPresentNotification:禁用提醒:

-(BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification
{
    //apple push notification alert will contain userInfo with aps payload, so disable here
    if (notification.userInfo[@"aps"])
        return NO;

    return YES;
}

我还没有找到任何禁用声音的方法。