macos – 应用程序未运行时播放推送通知声音效果(Mac)

我正在将推送通知添加到我的Mac应用程序中.通知显示正常,但由于某种原因,我不能让声音效果发挥我认为应该的方式.

我正在传递自定义声音,在apns有效载荷中“custom.caf”.这适用于我们的iOS应用程序.传入Mac应用程序时它不会播放任何内容.在非常有限的Apple文档中,PushyMac应用程序显示您必须根据推送的userInfo字典手动播放声音.如果我在应用程序运行时手动播放声音,我会播放声音效果.

我的问题是应用程序关闭但没有运行.我仍然按预期获得推送通知,但没有声音播放.据我所知,我只是搞砸了.我有其他Mac应用程序仍然可以在它们不运行时播放声音.特别是我的电子邮件应用,Spark.所以我知道这是可能的,但我无法弄清楚它的秘诀是什么.请帮忙!!

最佳答案 实现Apple推送通知的自定义声音功能非常简单;问题是文档没有提到执行此操作所需的内容.

所需的关键组件是扩展 – (例如,使用Today Extension).在项目中创建新目标,包括扩展,自定义声音和标准APN功能都是必需的.在应用程序未运行时获取自定义声音的关键只是在应用程序中存在扩展名(并且包含NotificationCenter.framework).

添加新目标>今日延期:

《macos – 应用程序未运行时播放推送通知声音效果(Mac)》

今天延伸>构建阶段>复制捆绑资源>自定义声音:

《macos – 应用程序未运行时播放推送通知声音效果(Mac)》

需要在主应用程序中的唯一特定APN功能如下:

func applicationDidFinishLaunching(_ aNotification: Notification) {
                                   NSApplication.shared().
                                   registerForRemoteNotifications(matching: 
                                   [.alert, .sound, .badge])
                                   NSApp.dockTile.badgeLabel = nil
}

func application(_ application: NSApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
}

func application(_ application: NSApplication, didReceiveRemoteNotification 
                                userInfo: [String : Any]) {
}

func application(_ application: NSApplication, 
                 didFailToRegisterForRemoteNotificationsWithError error: Error) {
                 print("could not register for notfications: \(error)")
}

如果您同时播放两个声音,则可能是您有调用AudioServicesPlaySystemSound的代码,并且可以将其删除,因为NotificationCenter.framework似乎可以处理所有这些而无需添加任何其他内容.

点赞