web-dev-qa-db-ja.com

IOS 8でローカル通知が有効になっているかどうかを確認します

IOS 8.を使用してローカル通知を作成する方法をインターネットで調べました。多くの記事を見つけましたが、ユーザーが「アラート」をオンまたはオフに設定したかどうかを判断する方法については説明しませんでした。誰かが私を助けてくれますか!!!私はSwiftよりもObjective Cを使用したいと思います。

30
Jacob Richman

UIApplicationの-​​ currentUserNotificationSettings を使用して確認できます

if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){ // Check it's iOS 8 and above
    UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];

    if (grantedSettings.types == UIUserNotificationTypeNone) {
        NSLog(@"No permiossion granted");
    }
    else if (grantedSettings.types & UIUserNotificationTypeSound & UIUserNotificationTypeAlert ){
        NSLog(@"Sound and alert permissions ");
    }
    else if (grantedSettings.types  & UIUserNotificationTypeAlert){
        NSLog(@"Alert Permission Granted");
    }
}

これがお役に立てば幸いです、もっと情報が必要なら教えてください

75
Bhumit Mehta

アルバートの答えを拡張するために、SwiftでrawValueを使用する必要はありません。 UIUserNotificationTypeOptionSetTypeに準拠しているため、次のことが可能です。

if let settings = UIApplication.shared.currentUserNotificationSettings {
    if settings.types.contains([.alert, .sound]) {
        //Have alert and sound permissions
    } else if settings.types.contains(.alert) {
        //Have alert permission
    }
}

ブラケット[]構文を使用してオプションタイプを結合します(他の言語でオプションフラグを結合するためのビット単位または|演算子に似ています)。

22
simeon

guardを使用したスウィフト:

guard let settings = UIApplication.sharedApplication().currentUserNotificationSettings() where settings.types != .None else {
    return
}
9
zgjie

Swiftの単純な関数は、少なくとも1種類の通知が有効かどうかをチェックします。

楽しい!

static func areNotificationsEnabled() -> Bool {
    guard let settings = UIApplication.shared.currentUserNotificationSettings else {
        return false
    }

    return settings.types.intersection([.alert, .badge, .sound]).isEmpty != true
}

インスピレーションをくれたMichałKałużnyに感謝します。

8
dustinrwh

編集:@simeonの answer を見てください。

Swiftでは、rawValueを使用する必要があります。

let grantedSettings = UIApplication.sharedApplication().currentUserNotificationSettings()
if grantedSettings.types.rawValue & UIUserNotificationType.Alert.rawValue != 0 {
    // Alert permission granted
} 
6

このコードはより正確だと思います:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {

    UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];

    if (types & UIUserNotificationTypeBadge) {
        NSLog(@"Badge permission");
    }
    if (types & UIUserNotificationTypeSound){
        NSLog(@"Sound permission");
    }
    if (types & UIUserNotificationTypeAlert){
        NSLog(@"Alert permission");
    }
}
3
Evok

@simeon answer Xcodeを使用すると、

「currentUserNotificationSettings」はiOS 10.0で非推奨になりました:UserNotificationsフレームワークの-[UNUserNotificationCenter getNotificationSettingsWithCompletionHandler:]および-[UNUserNotificationCenter getNotificationCategoriesWithCompletionHandler:]を使用します

Swift 4にUNUserNotificationCenterを使用するソリューションは次のとおりです。

UNUserNotificationCenter.current().getNotificationSettings(){ (settings) in

        switch settings.alertSetting{
        case .enabled:

            //Permissions are granted

        case .disabled:

            //Permissions are not granted

        case .notSupported:

            //The application does not support this notification type
        }
    }
2
Andrea Gorrieri

Objective C + iOS 10

  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

        switch (settings.authorizationStatus) {
            case UNAuthorizationStatusNotDetermined:

                break;

            case UNAuthorizationStatusDenied:

                break;

            case UNAuthorizationStatusAuthorized:

                break;

            default:
                break;
        }
    }];
0
Ofir Malachi