web-dev-qa-db-fra.com

Activer/désactiver la notification Apple Push depuis une application iPhone?

J'ai encore un doute sur APNS. C'est lors du premier lancement de l'application qu'elle demande l'autorisation de notification Apple Push si l'utilisateur a accepté de recevoir les notifications. Si l'utilisateur a annulé, il ne peut recevoir aucune notification. Suis-je clair?? 

Maintenant, je doute,

  1. À la première occasion, si l'utilisateur annulait à nouveau le service de notification Push de l'application (bouton Clic Cancel) après quelques jours, s'il souhaitait recevoir la notification Apple Push, il était possible d'activer à nouveau la notification Apple Push pour cet utilisateur. 

  2. Et si l'utilisateur accepte le service de notification Apple Push en premier et après quelques jours s'il ne veut pas recevoir les notifications, il est possible de désactiver la APNS dans notre application? J'espère que tu comprends mon doute. Quelqu'un peut-il s'il vous plaît clarifier ce doute?

  3. Il est possible de faire ces scénarios ci-dessus dans notre application iPhone?

Aidez-moi, s'il vous plaît. Merci d'avance.

20
Gopinath

Malheureusement, vous ne pouvez pas activer ou désactiver les notifications push pour votre application à partir du code de l'application. La boîte de dialogue demandant une autorisation ne s'affiche qu'une fois. Généralement, d’autres applications affichent des instructions à l’utilisateur pour activer/désactiver les notifications Push en allant dans Paramètres-> Notification-> NomApp.

15
adig

Vous pouvez lire les autorisations de votre application en utilisant UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];, puis en effectuant une opération au niveau des bits et avec les différents types pour voir lesquels sont activés. Vous pouvez également appeler unregisterForRemoteNotifications pour désactiver les notifications. La seule chose que vous ne pouvez pas faire est d'activer les notifications, bien que vous puissiez diriger l'utilisateur.

16
jrtc27

Mon exigence était d'activer et de désactiver la pushnotificaton avec une UISwitch. Afin de activer la notification Push à partir du code utiliser ceci à l'intérieur de l'action du bouton.

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
   (UIRemoteNotificationTypeBadge |  UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

Afin de désactiver

[[UIApplication sharedApplication] unregisterForRemoteNotifications];
NSLog(@"UnRegistered for pushnotification");
4
arshad

Lorsque vous donnez l'autorisation pour la première fois, le jeton de périphérique de votre iPhone est enregistré sur le serveur APN et vous pouvez alors recevoir la notification Push. Plus tard, vous pourrez activer/désactiver les paramètres de votre appareil → notification → votre application.

1
wasim

1.Depuis votre application, non, cela n'apparaît que la première fois que l'utilisateur ouvre votre application après l'avoir installée .. s'il décide de l'autoriser, il peut être activé à partir des paramètres de l'appareil.

2.il peut être fait à partir de l'application et des paramètres .. si vous voulez le désactiver à partir de votre application, vous pouvez envoyer le jeton de périphérique (qui décide de désactiver la notification Push) sur votre serveur et le stocker, par exemple. comme "pas de liste de notification" et lorsque vous envoyez le contenu, vous ignorez ces jetons afin qu'ils ne reçoivent pas la notification.

3.J'y réponds déjà.

Bonne chance.

1
Malek_Jundi

De manière pragmatique, il est possible d'activer et de désactiver la notification Push en enregistrant et en désenregistrant la notification Push. 

Activer la notification push:

if #available(iOS 10.0, *) {
   // For iOS 10.0 +
   let center  = UNUserNotificationCenter.current()
   center.delegate = self
   center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
        if error == nil{
           DispatchQueue.main.async(execute: {
                 UIApplication.shared.registerForRemoteNotifications()
           }) 
        }
   }
}else{
    // Below iOS 10.0

    let settings = UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil)
    UIApplication.shared.registerUserNotificationSettings(settings)

    //or
    //UIApplication.shared.registerForRemoteNotifications()
}

Méthodes déléguées

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

}

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

}


func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    // .. Receipt of device token
}


func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    // handle error
}

Désactiver la notification push:

UIApplication.shared.unregisterForRemoteNotifications()
0
Krunal

Vous pouvez utiliser ce code pour fournir un support dans iOS 9

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

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

    if (types == UIUserNotificationTypeNone) {
        // Do something
        NSLog(@"");
    }
} else {

    UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

    if (types == UIRemoteNotificationTypeNone) {
        // Do something
        NSLog(@"");
    }
}

voir Comment mettre à jour le code en utilisant enabledRemoteNotificationTypes car il n'est "pas pris en charge dans iOS 8"?

0
debiasej