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

标签 macos cocoa apple-push-notifications badge

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

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

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

最佳答案

由于我没有找到任何解决方案来正确执行此操作,因此我将接受我的解决方法:

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

可以通过NSUserNotificationCenterDelegate委托(delegate)方法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;
}

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

关于macos - 如何防止设置不是由我的代码设置的 [NSApp dockTile] badLabel 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768278/

相关文章:

objective-c - 在 Cocoa 和 Objective-C 中使用 sudo 命令?

objective-c - 如何在 Objective C 的 typedef 枚举中添加新的枚举?

objective-c - 以编程方式向 nsview 添加关闭按钮

swift - 在 640x852 像素的 NSImageView 中显示 500x500 像素的图像,没有任何种类或模糊(OS X 上的 Swift)

ruby - 使用macruby或ruby cocoa读取系统信息

swift - 在后台 Swift 中跟踪推送通知

php - 带有 php 问题的代号一推送通知

macos - mac防火墙不会为nginx打开

cocoa - 在 NSOperation 中自动释放对象安全吗?

ios - 如何在 Xcode 12 中启用推送通知