web-dev-qa-db-fra.com

demander à l'utilisateur la permission d'afficher une alerte lors du déclenchement d'une notification locale

Je souhaite afficher une alerte lorsque la notification locale est déclenchée, mais pour cela, je dois demander une autorisation, comme il est indiqué lors de l'exécution de l'application sur mon iPhone: 

Tentative de planification d'une notification locale {date d'incendie = vendredi 13 juin 2014 12 h 10 min 27 s Heure d'été d'Europe centrale, fuseau horaire = (nul), intervalle répété = 0, nombre de répétitions = UILocalNotificationInfiniteRepeatCount, prochaine date d'incendie = vendredi 13 juin 2014 12 h 10 min 27 s Heure d'été d'Europe centrale, informations sur l'utilisateur = (null)} avec une alerte, mais n'a pas reçu l'autorisation de l'utilisateur pour afficher des alertes

Comment puis je faire ça? Voici le code actuel:

    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];
13
user3737316

si vous ajoutez ce code, une alerte apparaîtra pour demander à l'utilisateur l'autorisation.

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge
                                                                                                          categories:nil]];
}

vous pouvez ajouter ce code dans l'application: didFinishLaunchingWithOptions; méthode, de sorte que l'application demande à votre utilisateur quand il lance l'application, ou vous pouvez ajouter ce code lorsque vous définissez Notification locale, c'est à vous de décider.

40
蘇健豪

La réponse de 蘇健豪 est bonne.

Dans Swift, cela ressemble à ceci:

let registerUserNotificationSettings = UIApplication.instancesRespondToSelector("registerUserNotificationSettings:")

if registerUserNotificationSettings { 
    var types: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Sound     
    UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotific‌​ationSettings(forTypes: types, categories: nil))
} 

Voir aussi ici: Demander à l'utilisateur la permission de recevoir UILocalNotifications dans iOS 8

4
Morkrom

En langue swift ....

var type = UIUserNotificationType.Badge | UIUserNotificationType.Alert | UIUserNotificationType.Sound;
var setting = UIUserNotificationSettings(forTypes: type, categories: nil);
UIApplication.sharedApplication().registerUserNotificationSettings(setting);
UIApplication.sharedApplication().registerForRemoteNotifications();
1
Krishnaveni
//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];
}
1
Cayke Prudente

Essayez ceci pour 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; 
    }
0
Jaime