【问题标题】:PyObjC "Notifications are not allowed for this application"PyObjC“此应用程序不允许通知”
【发布时间】:2019-08-06 17:43:12
【问题描述】:

我正在尝试测试一个简单的 Python 脚本来发送 macOS 通知:

import UserNotifications

def notif_callback(err):
    print("Error in notification callback:",err)

def auth_callback(granted, err):
    print("Granted: ",granted,)
    print("Error in authorization request: ",err)

content=UserNotifications.UNMutableNotificationContent.alloc().init()
content.setTitle_("Test")
r=UserNotifications.UNNotificationRequest.requestWithIdentifier_content_trigger_('test_notification',content,None)


c=UserNotifications.UNUserNotificationCenter.currentNotificationCenter()

c.requestAuthorizationWithOptions_completionHandler_(0b111111,auth_callback)

c.addNotificationRequest_withCompletionHandler_(r,notif_callback)

但是,当我尝试运行该程序时,它给出了以下错误

Granted: False
Error in authorization request:  Error Domain=UNErrorDomain Code=1 "Notifications are not allowed for this application" UserInfo={NSLocalizedDescription=Notifications are not allowed for this application}
Error in notification callback: Error Domain=UNErrorDomain Code=1 "Notifications are not allowed for this application" UserInfo={NSLocalizedDescription=Notifications are not allowed for this application}

我没有看到来自我的系统的任何通知授权,并且操作系统似乎自动拒绝了该请求。在系统偏好设置中,Python 已被授予所有通知权限。我在这里错过了什么?

【问题讨论】:

标签: objective-c python-3.7 macos-mojave pyobjc


【解决方案1】:

只有代码签名的应用程序才会被授权通过UNUserNotificationCenter 发送用户通知。我认为这个要求是新的,不适用于NSUserNotificationCenter

编辑:这实际上很容易实现。您只需要一个签名的 Python 框架构建,由python.org 的官方安装程序提供。通过 Homebrew 或大多数其他渠道安装的 AFAIK 未签名。

【讨论】:

  • 感谢您的信息。我在哪里可以找到有关您提到的这条规则的内容?
  • 我不确定这是否记录在任何地方。使用 Xcode 构建的应用程序通常是经过签名的,即使仅使用临时证书也是如此,因此它可能不会成为 Apple 开发者论坛中的问题。所有地方的Xamarin docs 中有一条注释:“对于 MacOS 应用程序,要显示权限对话框,您必须签署您的 macOS 应用程序,即使在 DEBUG 模式下本地构建也是如此。”
  • 这是正确的。示例 OP 在 python.org 发布的 MacOS Python 上“正常工作”
猜你喜欢
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2019-08-24
相关资源
最近更新 更多