1

アプリがフォアグラウンドで実行されている/実行されていないときに、通知をスケジュールしてユーザーに表示することができました。ViewControllerここで、この通知のタップ時にを表示する必要があります。

didReceiveRemoteNotificationユーザーが通知をタップしたときに呼び出される関数であることを理解しています。私の場合、この関数は決して起動されません。

AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }

        return true
}

//didReceiveRemoteNotification goes here

didReceiveRemoteNotification 関数:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        if ( application.applicationState == UIApplicationState.active)
        {
            print("Active")
            // App is foreground and notification is recieved,
            // Show a alert.
        }
        else if( application.applicationState == UIApplicationState.background)
        {
            print("Background")
            // App is in background and notification is received,
            // You can fetch required data here don't do anything with UI.
        }
        else if( application.applicationState == UIApplicationState.inactive)
        {
            print("Inactive")
            // App came in foreground by used clicking on notification,
            // Use userinfo for redirecting to specific view controller.
        }
}

これは、my 内の通知関連のコード全体AppDelegateです。何か不足していますか?

4

1 に答える 1

3

UserNotificationsフレームワークの場合は、で作業する必要があるため、メソッドでデリゲートをUNUserNotificationCenterDelegate実装UNUserNotificationCenterDelegateして設定します。AppDelegatedidFinishLaunchingWithOptions

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let center = UNUserNotificationCenter.current()
    center.delegate = self
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
        // Enable or disable features based on authorization.
    }

    return true
}

次に、通知を取得するための実装userNotificationCenter(_:willPresent:withCompletionHandler:)とメソッドが必要です。userNotificationCenter(_:didReceive:withCompletionHandler:)

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    //Handle notification
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    // pull out the buried userInfo dictionary
    let userInfo = response.notification.request.content.userInfo

    if let customData = userInfo["customData"] as? String {
        print("Custom data received: \(customData)")

        switch response.actionIdentifier {
        case UNNotificationDefaultActionIdentifier:
            // the user swiped to unlock
            print("Default identifier")

        case "show":
            // the user tapped our "show more info…" button
            print("Show more information…")
            break

        default:
            break
        }
    }

    // you must call the completion handler when you're done
    completionHandler()
}

詳細については、このAppCodaチュートリアルを確認することもできます。Introduction to User Notifications Framework in iOS 10

于 2016-12-29T15:58:42.760 に答える