iOS Enregistrement des notifications Push dans l'application

Q1. Dois-je faire cela au début de mon application? Ou puis-je triggersr l'invite pour autoriser / ne pas autoriser à tout moment dans mon application?

Q2. Est-il possible de savoir si l'user a cliqué sur oui / non? (callbacker?)

Q3. Si l'user a déjà cliqué sur non, (lors d'une session précédente), mon invite se triggersra-t-il réellement? Ou dois-je requestr à l'user d'accéder aux parameters de son téléphone et de l'activer?

Raison d'être est que j'ai une application qui a une section à l'intérieur appelée "Notifications" par lequel ils peuvent activer / désactiver pour recevoir des notifications sur certaines choses, donc je veux seulement les inviter à activer etc quand ils sont dans cette section pas au début de l'application.

A1: Non, ce n'est pas obligatoire au début de l'application. Vous pouvez appeler registerForRemoteNotificationTypes de n'importe où dans le code.

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

Vous devrez gérer les methods de delegates suivantes (en délégué) qui sont appelées en cas d'échec / succès d'logging pour la notification push.

 // Delegation methods - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { const void *devTokenBytes = [devToken bytes]; self.registered = YES; [self sendProviderDeviceToken:devTokenBytes]; // this will send token to your server's database } - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { NSLog(@"Error in registration. Error: %@", err); } 

A2: Oui vous pouvez. Il y a deux scénarios possibles. Si votre application n'est pas en cours d'exécution, vous devez gérer la notification push dans didFinishLaunchingWithOptions. Dans ce cas, si l'user a sélectionné "Ouvrir" dans l'alerte de message ou cliqué sur Bannières (selon les parameters de l'user), votre application démarre automatiquement et vous pouvez gérer les parameters user transmis dans la notification push.

  /* Push notification received when app is not running */ NSDictionary *params = [[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"] objectForKey:@"appsInfo"]; if (params) { // Use params and do your stuffs } 

Si votre application est déjà en cours d'exécution, une notification push sera application:didReceiveRemoteNotification: à l' application:didReceiveRemoteNotification: méthode de délégation où vous pouvez simplement présenter UIAlertView avec le message en notification push et gérer les delegates alertView OK / Annuler le clic de manière standard.

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSDictionary *apsInfo = [userInfo objectForKey:@"apsinfo"]; // This appsInfo set by your server while sending push NSSsortingng *alert = [apsInfo objectForKey:@"alert"]; UIApplicationState state = [application applicationState]; if (state == UIApplicationStateActive) { application.applicationIconBadgeNumber = 0; AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"Push Notification" message:alert delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES"]; [alertview show]; [alertview release]; } else { [self setTabs:contentsInfo]; } } - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex != [alertView cancelButtonIndex]) { // User pressed YES, do your stuffs } } 

A3: Si l'user a refusé d'accepter la notification push de votre application, alors son didFailToRegisterForRemoteNotificationsWithError et vous n'obtiendrez donc pas devToken de l'user qui doit être sur votre server pour envoyer une notification push à cet user. Si l'user accepte initialement mais plus tard s'il a modifié les parameters pour désactiver votre notification push, le server Apple n'enverra pas votre notification push à cet user. Dans ce cas, l'UDID de cet user apparaîtra dans le service de feedback et, idéalement, votre server devrait supprimer l'UDID de cet user de la database et arrêter d'envoyer une notification push à ces users. Si vous continuez d'envoyer une notification push non valide, le server Apple risque de supprimer votre connection en mode silencieux et vous ne pourrez pas envoyer de notifications push.

Pour plus d'informations sur la mise en œuvre, consultez les documents Apple Push Notification .

  • Q1 Il n'est pas nécessaire de mettre le registre push au lancement de l'application, mais certains le mettent en application: didFinishLaunchingWithOptions: pour s'assurer que le jeton du périphérique est correctement stocké sur le server du développeur.
  • Q2 Qu'est-ce que le "oui / non" pour ici? Si vous voulez dire "oui / non" sur "si recevoir une notification push", alors si l'user a cliqué sur "oui", l' application: didRegisterForRemoteNotificationsWithDeviceToken déléguée application: didRegisterForRemoteNotificationsWithDeviceToken sera déclenchée, sinon non.
  • Q3 Si l'user clique sur "non" pour refuser de recevoir la notification push, alors vous pouvez lui callbacker de l'activer dans les parameters, ou avoir une fonction, comme un UISwitch, pour permettre aux users de triggersr [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)]; encore.

Vous pouvez utiliser le didacticiel suivant pour swift ( Lien de visite ) et utiliser le code simple suivant pour l'objective-c pour Apple Push Notification.

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) { // iOS 8 Notifications [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound |UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [application registerForRemoteNotifications]; } return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken); } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"Did Fail to Register for Remote Notifications"); NSLog(@"%@, %@", error, error.localizedDescription); } -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"%@",userInfo); } 

Répondez pour la question: 2 dans iOS 10.

Dans l'iOS: 10, un gestionnaire d'achèvement est implémenté. Par conséquent, vous serez averti immédiatement dans le bloc du gestionnaire d'achèvement.

 if([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.f){ UNUserNotificationCenter* notificationCenter = [UNUserNotificationCenter currentNotificationCenter]; [notificationCenter requestAuthorizationWithOptions:UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge completionHandler:^(BOOL granted, NSError * _Nullable error) { NSLog(@"grant Access:%d",granted); }];