J'ai intégré les notifications Push dans mon application. Les utilisateurs recevront une notification Push pour rejoindre un groupe. Lorsque l'utilisateur clique sur Join, je dois gérer quelque chose dans le code. Et donc j'implémente:
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
Cela fonctionne bien lorsque l'application n'est pas en cours d'exécution.
Lorsque l'application est en cours d'exécution, je ne vois aucun UIAlertView
. Comment faire en sorte que mon application affiche l'alerte de notification Push afin que l'utilisateur puisse toujours décider de se joindre ou non?
J'ai utilisé un code comme celui-ci dans mon délégué d'application pour imiter l'alerte de notification lorsque l'application était active. Vous devez implémenter la ou les méthodes de protocole UIAlertViewDelegate
appropriées pour gérer ce qui se passe lorsque l'utilisateur appuie sur l'un des boutons.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
NSString *cancelTitle = @"Close";
NSString *showTitle = @"Show";
NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Some title"
message:message
delegate:self
cancelButtonTitle:cancelTitle
otherButtonTitles:showTitle, nil];
[alertView show];
[alertView release];
} else {
//Do stuff that you would do if the application was not active
}
}
Pour tous ceux qui pourraient être intéressés, j'ai fini par créer une vue personnalisée qui ressemble à la bannière Push du système en haut, mais ajoute un bouton de fermeture (petit X bleu) et une option pour appuyer sur le message pour une action personnalisée. Il prend également en charge le cas de plusieurs notifications arrivées avant que l'utilisateur n'ait eu le temps de lire/rejeter les anciennes (sans limite de nombre pouvant s'empiler ...)
L'utilisation est essentiellement en ligne:
[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];
Et cela ressemble à ceci sur iOS7 (iOS6 a un aspect et une sensation iOS6 ...)
Vous devez afficher l'alerte vous-même si vous le souhaitez. Il s'agit d'un comportement intentionnel tel que documenté ici http://developer.Apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html ci-dessous Liste 2-6
Pour afficher une vue d'alerte lors de l'exécution de l'application, vous devez utiliser
-(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
}
et en accédant à la variable userInfo
seule cette fonction sera invoquée et vous devrez explicitement afficher l'alerte dans ce cas, aucune notification ne viendra si l'application est en cours d'exécution dans laquelle vous avez implémenté la notification.Placez le point d'arrêt là et gérez l'appel de notification lorsque la fonction est appelée et affichez votre personnalisé alerte là-bas.
L'application recevra toujours le -application:didReceiveRemoteNotification
message dans votre délégué d'application, mais vous devrez agir vous-même sur le message (c'est-à-dire que l'alerte ne s'affiche pas par défaut).
Le paramètre userInfo
contient un objet avec la clé notificationType
, que vous pouvez utiliser pour identifier le message Push.
Voici une version qui prend en charge UIAlertController
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIApplicationState state = [application applicationState];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
if (state == UIApplicationStateActive) {
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:notification.alertTitle
message:notification.alertBody
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:ok];
[self.navigationController presentViewController:alert animated:YES completion:nil];
}
}
** Veuillez noter que mon application utilise self.navigationController dans App Delegate, connectez-vous à n'importe quel ViewController pour présenter (afficher) l'alerte **