2

何が欠けているのかわかりませんが、奇妙な問題で立ち往生しています!!!

通知音はするが表示されない。

アラートとサウンドのみを表示するようにアプリを登録しましたが、不思議なことに表示されません。通知が正常に追加されていることがわかります。しかし、私には理解できない些細なことがあるようです。

通知を削除しても機能します。

import Foundation
import NotificationCenter
import UserNotifications

class NotificationManager: NSObject {

    private let categoryIdentifier = "notificationCategory"

    private var toDateComponents = NSDateComponents()

    private enum actionIdentifier : String {
        case openApp = "openApp"
        case playMusic = "playMusic"
    }

    // MARK: - Register for notifications

    func registerForNotifications(application: UIApplication) {
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.currentNotificationCenter().getNotificationSettingsWithCompletionHandler { notificationSettings in
                switch notificationSettings.authorizationStatus {
                case .NotDetermined:
                    UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Alert, .Sound]) { (granted, error) in
                        // Enable or disable features based on authorization
                        if granted {
                            print("Access requested and was granted for sending notifications")
                            UNUserNotificationCenter.currentNotificationCenter().setNotificationCategories([])
                            UNUserNotificationCenter.currentNotificationCenter().delegate = self
                            self.setupNotificationActions()
                        } else {
                            print("Access requested and was denied for sending notifications")
                            print(error?.localizedDescription)
                        }
                    }
                case .Denied:
                    print("Notifications are turned off!!")
                break // nothing to do, pointless to go on
                case .Authorized:
                    self.setupNotificationActions()
                }
            }
        } else {
            // Nothing to do here
            print("iOS 9 says, Let's get started...")
            self.setupNotificationActions()
        }
    }

    // MARK: - Setup notification actions

    private func setupNotificationActions() {

        // Initialize and specify the notification actions
        if #available(iOS 10.0, *) {
            let openAppAction = UNNotificationAction(identifier: actionIdentifier.openApp.rawValue, title: "Open App", options: [.AuthenticationRequired, .Foreground])
            let playMusicAction = UNNotificationAction(identifier: actionIdentifier.playMusic.rawValue, title: "Play Music", options: [])
            let notificationCategory = UNNotificationCategory(identifier: categoryIdentifier, actions: [openAppAction, playMusicAction], intentIdentifiers: [], options: [.CustomDismissAction])

            UNUserNotificationCenter.currentNotificationCenter().setNotificationCategories([notificationCategory])
        } else {
            // Specify the notification actions
            let openAppAction = UIMutableUserNotificationAction()
            openAppAction.identifier = actionIdentifier.openApp.rawValue
            openAppAction.title = "Open App"
            openAppAction.activationMode = UIUserNotificationActivationMode.Foreground
            openAppAction.destructive = false

            let playMusicAction = UIMutableUserNotificationAction()
            playMusicAction.identifier = actionIdentifier.playMusic.rawValue
            playMusicAction.title = "Play Music"
            playMusicAction.activationMode = UIUserNotificationActivationMode.Background
            playMusicAction.destructive = false
            playMusicAction.authenticationRequired = false

            // Specify the category related to the above actions
            let notificationCategory = UIMutableUserNotificationCategory()
            notificationCategory.identifier = categoryIdentifier
            notificationCategory.setActions([openAppAction, playMusicAction], forContext: UIUserNotificationActionContext.Default)
            notificationCategory.setActions([playMusicAction], forContext: UIUserNotificationActionContext.Minimal)

            let notificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Sound], categories: NSSet(object: notificationCategory) as? Set<UIUserNotificationCategory>)
//            if (notificationSettings.types != UIUserNotificationType.None){
                UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)
//            }
        }
    }

そして、AppDelegate で...

private let notificationManager = NotificationManager()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    notificationManager.registerForNotifications(application)
}
4

2 に答える 2

1

デリゲートを正しく割り当てる必要があります。なぜこれが起こったのかを突き止めることはできませんでしたが、以下の変更により、通知が確実に行われました。

AppDelegate、

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

    private let notificationManager = NotificationManager()

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UNUserNotificationCenter.currentNotificationCenter().delegate = self
    notificationManager.registerForNotifications()

    }
}

デリゲート メソッドを AppDelegate 自体に挿入します。

于 2016-09-30T23:22:53.860 に答える