Спросить у пользователя разрешение показывать предупреждение при запуске локального уведомления
Я хочу показать предупреждение при локальном уведомлении, но для этого я должен попросить разрешения, поскольку он говорит мне, когда я запускаю приложение на своем iPhone:
Попытка запланировать местное уведомление {fire date = Friday 13 June 2014 12 h 10 min 27 s Центральноевропейское летнее время, часовой пояс = (null), интервал повторения = 0, число повторений = UILocalNotificationInfiniteRepeatCount, следующая дата огня = пятница 13 июня 2014 г. 12 ч. 10 мин. 27 с. Центральное европейское летнее время, информация пользователя = (null)} с предупреждением, но не получившим от пользователя разрешения на отображение предупреждений.
Как я могу это сделать?
Вот код такой, какой он есть сейчас:
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = [[NSDate date] dateByAddingTimeInterval:timeUntilNotification];
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.alertBody = @"ZEIT!";
localNotif.alertAction = @"Show me the Timer!";
localNotif.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] +1;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
Ответы
Ответ 1
добавьте этот код, он покажет предупреждение, чтобы спросить пользователя о разрешении.
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge
categories:nil]];
}
вы можете добавить этот код в приложение: didFinishLaunchingWithOptions;, так что приложение спросит вашего пользователя, когда оно запустит приложение, или вы можете добавить этот код, когда вы устанавливаете локальное уведомление, это зависит от вас.
Ответ 2
蘇健豪 ответ хороший.
В Swift это выглядит так:
let registerUserNotificationSettings = UIApplication.instancesRespondToSelector("registerUserNotificationSettings:")
if registerUserNotificationSettings {
var types: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Sound
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: types, categories: nil))
}
Также см. здесь: Запросить разрешение пользователя на получение UILocalNotifications в iOS 8
Ответ 3
//register notifications
if([application respondsToSelector:@selector(registerUserNotificationSettings:)]) //ios 8+
{
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
[application registerForRemoteNotifications];
}
else // ios 7 or less
{
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];
}
Ответ 4
В быстром языке....
var type = UIUserNotificationType.Badge | UIUserNotificationType.Alert | UIUserNotificationType.Sound;
var setting = UIUserNotificationSettings(forTypes: type, categories: nil);
UIApplication.sharedApplication().registerUserNotificationSettings(setting);
UIApplication.sharedApplication().registerForRemoteNotifications();
Ответ 5
Попробуйте это для Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"didFinishLaunchingWithOptions");
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil]];
}
return YES;
}