12

私のアプリでは、ユーザーが通知を有効にしているかどうかを確認できるようにしたいと考えています。iOS 10 では、デリゲートのチェックを使用してこれを行いました。

このチェックは非推奨になり、更新したいのですが、iOS 11 で何を使用すればよいかわかりません。

非推奨の警告は次のとおりです。

currentUserNotificationSettings は iOS 10.0 で廃止されました: UserNotifications フレームワークの -[UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:] および -[UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:] を使用してください。

この警告を利用してコードを更新しようとしましたが、わかりません。

とにかく誰かがこのようなチェックを機能させることを提案できれば、それは大いに役立ちます. iOS 10 で使用しているコードは以下のとおりです。

let notificationType = UIApplication.shared.currentUserNotificationSettings!.types
if notificationType == [] {
    print("Notifications are NOT enabled")
} else {
    print("Notifications are enabled")
}
4

3 に答える 3

33

ステップ1 :import UserNotifications

ステップ2 :

UNUserNotificationCenter.current().getNotificationSettings { (settings) in
  if settings.authorizationStatus == .authorized {
    // Notifications are allowed
  }
  else {
    // Either denied or notDetermined
  }
}

詳細については、設定オブジェクトを調べてください。

于 2017-10-10T10:22:32.960 に答える
9

最初の一歩:

ヘッダーファイルを次のように追加する必要があります

import UserNotifications

checkpushNotificationメソッドを使用して、ユーザーが通知を有効にするかどうかを確認しました。AppDelegate クラスの didFinishLaunchingWithOptions からこのメソッドを呼び出して使用します。問題がある場合は、以下にコメントしてください。

最後のステップ:

func checkPushNotification(){
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().getNotificationSettings(){ (setttings) in
                
                switch setttings.authorizationStatus{
                case .authorized:
                    
                    print("enabled notification setting")
                    
                case .denied:
                    
                    print("setting has been disabled")
                    
                case .notDetermined:
                    print("something vital went wrong here")
                }
            }
        } else {

            let isNotificationEnabled = UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert)
            if isNotificationEnabled{
                
                print("enabled notification setting")
            }else{
                
                print("setting has been disabled")
            }
        }
    }

また、特定のブール出力を有効または無効にしたい場合は、完了ハンドラーを実装して解決する必要があります。

func checkPushNotification(checkNotificationStatus isEnable : ((Bool)->())? = nil){
        
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().getNotificationSettings(){ (setttings) in
                
                switch setttings.authorizationStatus{
                case .authorized:
                    
                    print("enabled notification setting")
                    isEnable?(true)
                case .denied:
                    
                    print("setting has been disabled")
                    isEnable?(false)
                case .notDetermined:
                    
                    print("something vital went wrong here")
                    isEnable?(false)
                }
            }
        } else {
            
            let isNotificationEnabled = UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert)
            if isNotificationEnabled == true{
                
                print("enabled notification setting")
                isEnable?(true)

            }else{
                
                print("setting has been disabled")
                isEnable?(false)
            }
        }
    }

そして、これを次のように単純に呼び出します

  self.checkPushNotification {  (isEnable) in
    print(isEnable)
    // you know notification status.
}
于 2017-10-10T10:22:59.873 に答える