IOS 8.を使用してローカル通知を作成する方法をインターネットで調べました。多くの記事を見つけましたが、ユーザーが「アラート」をオンまたはオフに設定したかどうかを判断する方法については説明しませんでした。誰かが私を助けてくれますか!!!私はSwiftよりもObjective Cを使用したいと思います。
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");
}
}
これがお役に立てば幸いです、もっと情報が必要なら教えてください
アルバートの答えを拡張するために、SwiftでrawValue
を使用する必要はありません。 UIUserNotificationType
はOptionSetType
に準拠しているため、次のことが可能です。
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
}
}
ブラケット[]
構文を使用してオプションタイプを結合します(他の言語でオプションフラグを結合するためのビット単位または|
演算子に似ています)。
guard
を使用したスウィフト:
guard let settings = UIApplication.sharedApplication().currentUserNotificationSettings() where settings.types != .None else {
return
}
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に感謝します。
編集:@simeonの answer を見てください。
Swiftでは、rawValue
を使用する必要があります。
let grantedSettings = UIApplication.sharedApplication().currentUserNotificationSettings()
if grantedSettings.types.rawValue & UIUserNotificationType.Alert.rawValue != 0 {
// Alert permission granted
}
このコードはより正確だと思います:
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");
}
}
@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
}
}
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;
}
}];