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

时间:2016-12-30 16:26:56

标签: macos apple-push-notifications

我正在将推送通知添加到我的Mac应用中。通知显示得很好,但出于某种原因,我无法按照我认为应该的方式播放声音效果。

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

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

1 个答案:

答案 0 :(得分:1)

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

所需的关键组件是扩展 - (例如,使用 Today Extension )。在项目中创建新目标,包括扩展,自定义声音和标准APN功能都是必需的。 在应用程序未运行时让自定义声音正常工作只是具有扩展名(并且包含 NotificationCenter.framework )出现在您的申请中。

添加新目标>今天扩展:

today extension

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

build phases

主要应用程序中唯一需要的特定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似乎处理了所有这些而没有添加额外的任何内容。

相关问题