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 réponses
il ya quelques étapes simples que vous devez suivre:
-
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];
-
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{}
-
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 :)
- (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
*/
}
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:
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:
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.
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 .
dans la page suivante, sélectionnez Apple Push Notification Authentication Key (Sandbox & Production) et cliquez Continuer au bas de la page.
Apple générera alors un fichier clé .p8
contenant votre clé D'authentification APNs.
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?