Comment puis-je implémenter le service de notification Apple Push sur L'Application iOS?

y a-t-il un exemple de projet montrant comment intégrer APNS sur IPhone , et comment obtenir deviceToken?

3
demandé sur Krunal 2012-05-09 15:49:22

3 réponses

il ya quelques étapes simples que vous devez suivre:

  1. dans les options de votre délégué, vous devez vous enregistrer pour les notifications à distance. notez que les documentations d'apple suggèrent de s'enregistrer chaque fois que l'application tourne car le token peut changer de temps en temps. vous faites cela en appelant:

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    
  2. après avoir enregistré pour des notifications à distance une méthode dans votre application delegate sera appelé qui a passé le token, vous devez implémenter cette méthode dans votre app delegate et envoyer le token à votre serveur (qui vous enverra des notifications). la méthode ressemblera à ceci:

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    
        NSLog(@"device token is: %@",deviceToken);
        [server sendToken:deviceToken];
    }
    

vous devriez également mettre en œuvre ceci:

    -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{}
  1. vous devez gérer les notifications une fois que vous les recevez. il y a peu de différents scénarios dans lesquels vous manipulez reçu des notifications (l'application est en arrière-plan ou au premier plan etc.), la méthode qui gère une notification si l'application est au premier plan lorsque vous recevez doit être mise en œuvre dans l'application délégué. c'est ça:

    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
        NSLog(@"received notification");
        //handle the notification here
    }
    

pour en savoir plus sur la structure userInfo et couvrir tous les différents scénarios lire attentivement http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html . c'était juste l'essentiel de choses :)

24
répondu David Ben Ari 2014-09-01 14:21:18
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 // Register for Push Notitications, if running on iOS 8
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
 }else{
    [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}
  return YES;
}
#pragma mark
#pragma mark -- Push Notification Delegate Methods
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:   (UIUserNotificationSettings *)notificationSettings{
//register to receive notifications
[application registerForRemoteNotifications];
}
-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
// Prepare the Device Token for Registration (remove spaces and < >)
 NSString* devToken = [[[[deviceToken description]
              stringByReplacingOccurrencesOfString:@"<"withString:@""]
             stringByReplacingOccurrencesOfString:@">" withString:@""]
            stringByReplacingOccurrencesOfString: @" " withString: @""];
NSLog(@"My token is: %@", devToken);
}
-(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error{
//  NSLog(@"Failed to get token, error: %@", error);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"%s..userInfo=%@",__FUNCTION__,userInfo);
/**
 * Dump your code here according to your requirement after receiving push
 */
 }
0
répondu Mannam Brahmam 2016-01-05 05:29:50

voici un bref document sur - comment activer et envoyer la notification push dans iOS.

Activer Les Notifications Push

la première étape dans la configuration des notifications push est d'activer la fonctionnalité de Xcode 8 pour votre application. Allez simplement dans l'éditeur de projet pour votre cible, puis cliquez sur L'onglet capacités. Recherchez les notifications Push et basculez sa valeur à ON:

enter image description here

Activer / Désactiver La Fonctionnalité

Xcode devrait afficher deux coches indiquant que la capacité a été activée avec succès. Dans les coulisses, Xcode crée un identifiant D'application dans le Developer Center et active le service de notification Push pour votre application.

Enregistreurs

les dispositifs doivent être uniques identifié pour recevoir des notifications push.

chaque périphérique qui installe votre application se voit attribuer un token périphérique unique par APNs que vous pouvez utiliser pour le pousser à tout moment. Une fois que le périphérique a été assigné un token unique, il doit être persisté dans votre base de données backend.

un jeton d'échantillon ressemble à ceci:

5810F4C8C2AF5F7 F7 D6AF71A 22745D0FB50DED 665E0E882 BC5370D9CF0A F19E16  

pour demander un jeton de périphérique pour le périphérique courant, ouvrez AppDelegate.swift et ajouter ce qui suit à la fonction de rappel didFinishLaunchingWithOptions, avant la déclaration de retour:

// iOS 10 support
if #available(iOS 10, *) {  
    UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in }
    application.registerForRemoteNotifications()
}
// iOS 9 support
else if #available(iOS 9, *) {  
    UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
    UIApplication.shared.registerForRemoteNotifications()
}
// iOS 8 support
else if #available(iOS 8, *) {  
    UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
    UIApplication.shared.registerForRemoteNotifications()
}
// iOS 7 support
else {  
    application.registerForRemoteNotifications(matching: [.badge, .sound, .alert])
}

dans iOS 10, un nouveau cadre appelé UserNotifications a été introduit et doit être importé afin d'accéder à la classe Inutilernotificationcenter.

ajouter la déclaration d'importation suivante au haut de AppDelegate.swift:

import UserNotifications 

Ensuite, allez dans l'éditeur de projet pour votre cible, et dans l'onglet Général, recherchez Liés Section cadres et bibliothèques.

cliquez sur + et sélectionnez UserNotifications.cadre:

enter image description here

ensuite, ajouter les callbacks suivants dans AppDelegate.swift qui sera invoqué lorsque APNs a soit enregistré avec succès, soit échoué à enregistrer l'appareil pour recevoir des notifications:

// Called when APNs has assigned the device a unique token
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {  
    // Convert token to string
    let deviceTokenString = deviceToken.reduce("", {"151930920" + String(format: "%02X", )})

    // Print it to console
    print("APNs device token: \(deviceTokenString)")

    // Persist it in your backend in case it's new
}

// Called when APNs failed to register the device for push notifications
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {  
    // Print the error to console (you should alert the user that registration failed)
    print("APNs registration failed: \(error)")
}

c'est à vous de mettre en œuvre la logique qui persistera jeton dans votre application backend. Plus tard dans ce guide, votre serveur d'arrière-plan se connectera à APNs et enverra des notifications push en fournissant ce même token périphérique pour indiquer quel(s) périphérique (s) devrait recevoir la notification.

notez que le token de périphérique peut changer dans le futur pour diverses raisons, utilisez donc NSUserDefaults, un stock local de valeurs clés, pour persister le token localement et ne mettre à jour votre backend que lorsque le token a changé, pour éviter les requêtes inutiles.

lancez votre application sur un dispositif iOS physique (le simulateur iOS ne peut pas recevoir de notifications) après avoir fait les modifications nécessaires pour AppDelegate.Swift. Recherchez la boîte de dialogue suivante, et appuyez sur OK pour permettre à votre application de recevoir des notifications push:

Boîte De Dialogue D'Alerte

dans une seconde ou deux, la console Xcode devrait afficher le token unique de votre appareil. Copiez-le et sauvegardez-le pour plus tard.

enter image description here

Préparez-vous à Recevoir des Notifications

ajouter le rappel suivant dans AppDelegate.swift qui sera invoqué lorsque votre application reçoit une notification push envoyée par votre serveur d'arrière-plan:

// Push notification received
func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any]) {  
    // Print notification payload data
    print("Push notification received: \(data)")
}

Notez que ce rappel ne sera invoqué lorsque l'utilisateur a cliqué ou glissée à interagir avec votre push notification de l'écran de verrouillage / Centre de Notification, ou si votre application était ouverte lorsque la notification push a été reçue par l'appareil.

C'est à vous de développer la logique réelle qui est exécutée lorsqu'une notification est interagi avec. Par exemple, si vous avez une application de messagerie, une notification push de "nouveau message" devrait ouvrir la page de chat pertinente et provoquer la liste des messages à être mis à jour à partir du serveur. Faire usage de l'objet de données qui contiendra toutes les données vous envoyez de votre application backend, tel que l'ID de chat, dans l'exemple d'application de messager.

Il est important de noter que dans le cas où votre application est ouverte lorsqu'une notification push est reçu, l'utilisateur ne pourra pas voir la notification, et c'est à vous de prévenir l'utilisateur d'une certaine façon. Cette question StackOverflow énumère quelques solutions de rechange possibles, telles que l'affichage d'une bannière in-app similaire à la bannière de notification stock iOS.

Générer une clé D'authentification APNs

ouvrez la page APNS Auth Key dans votre Developer Center et cliquez sur le bouton + pour créer un nouveau APNs Auth Key .

enter image description here

dans la page suivante, sélectionnez Apple Push Notification Authentication Key (Sandbox & Production) et cliquez Continuer au bas de la page.

enter image description here

Apple générera alors un fichier clé .p8 contenant votre clé D'authentification APNs.

enter image description here

Téléchargez le fichier .p8 sur votre ordinateur et sauvegardez-le pour plus tard. En outre, assurez-vous d'écrire l'ID de clé quelque part, comme vous en aurez besoin plus tard lors de la connexion à APNs.

Envoyer Push Notifications

maintenant, Regardez ici pour comprendre, APNS flow: Comment fonctionne iOS Push Notifications?

0
répondu Krunal 2018-05-22 16:59:21