web-dev-qa-db-fra.com

objectif c - Détecter lorsque l'utilisateur modifie les paramètres de notification de l'application

Je dois toujours savoir quelles options l'utilisateur choisit dans les paramètres de notification Push.
(Les options sont - alerte, son et badges)

Alors, quand mon application démarre, j'appelle:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

et détecter ce que l'utilisateur a choisi.

Mais comment puis-je détecter si l'utilisateur modifie les paramètres plus tard au cours de la durée de vie de l'application?
Existe-t-il une méthode de délégation appelée lorsque des modifications sont apportées à ces paramètres?

14
Eyal

Il n'y a pas de délégué. Vous devez interroger périodiquement la propriété UIApplicationenabledRemoteNotificationTypes, par exemple dans applicationDidBecomeActive:.

Pour plus de détails, vérifiez ces réponses:

Déterminer sur iPhone si l'utilisateur a activé les notifications Push

Afficher en écran de verrouillage et enabledRemoteNotificationTypes - iOS5

Modifier:
Si vous devez réinitialiser le paramètre de notification Push et l’alerte d’autorisation, consultez la la note technique Apple TN2265 . Dans la section "Réinitialisation de l'alerte d'autorisations de notifications Push sur iOS", ils expliquent comment réinitialiser le paramètre sur iOS. Cependant, de nombreux développeurs se plaignent que la procédure ne fonctionne pas. Vous ne savez pas si ce lien fonctionnera, vous aurez besoin d’avoir accès au forum Apple, mais c’est l’une des discussions sur ce problème précis.

Je me demandais moi-même si Apple avait peut-être supprimé la boîte de dialogue d'autorisation dans iOS 5.1. Sinon, pourquoi auraient-ils besoin que l'application affiche l'alerte? Selon Directives de révision de l'AppStore :

5.3 Les applications qui envoient des notifications push sans obtenir au préalable le consentement de l'utilisateur seront rejetées

Par exemple, Path (application) demande à l'utilisateur d'activer la notification Push au milieu du processus de sing-up, pas lorsque l'application démarre pour la première fois.

Vous ne savez pas quel doit être l'objectif de l'invite de toute façon, car l'application ne peut pas interroger l'état du paramètre de notification. En particulier, l'application peut vérifier quels types de notification (à l'aide de enabledRemoteNotificationTypes) sont activés, mais PAS si les notifications Push pour une application particulière sont activées ou désactivées (le commutateur ON/OFF du Centre de notifications situé en haut). Au moins c'est le comportement dans iOS 5.1. Même si l'utilisateur désactive les notifications pour cette application, celle-ci peut toujours s'enregistrer pour les notifications Push (à l'aide de registerForRemoteNotificationTypes) et recevra un jeton APNS.

22
Amiramix

Vérifiez-le lorsque votre application devient active plutôt que juste au lancement.

7
Nick Bull

Ceci est un exemple lorsque Push est mis en œuvre via UrbanAirship. Chaque fois que l'utilisateur choisit/désinscrit pour le feu des délégués suivant Push et avec la méthode ci-dessous, vous pouvez vérifier (OUI/NON).

Même chose avec le délégué UIApplication si vous n’utilisez pas UrbanAirship.

- (void)registrationSucceededForChannelID:(NSString )channelID deviceToken:(NSString )deviceToken
    {
        NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification]?@"YES":@"NO");
    }


    - (BOOL)appRegisterForPushNotification {
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
            UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
            return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound));
        }
        return NO;
    }
0
Venu Gopal Tewari