English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
I. Introducción
Divididas en notificaciones locales y notificaciones remotas2especies. Pueden proporcionar recordatorios a los usuarios incluso si la aplicación no está abierta o el teléfono está bloqueado. Todas necesitan estar registradas, después de estar registradas, el sistema mostrará un cuadro de diálogo de sugerencia (como se muestra en la imagen) para preguntar al usuario si está de acuerdo, si está de acuerdo se usará normalmente; si el usuario no está de acuerdo, el cuadro de diálogo de sugerencia no se mostrará la próxima vez que se abra el programa, y el usuario tendrá que ir a la configuración para configurarlo. Hay tres tipos de sugerencias:
UIUserNotificationTypeBadge:Información de la esquina superior derecha del ícono de la aplicación
UIUserNotificationTypeSound:Reproducir el tono de alerta
UIUserNotificationTypeAlert:Cuadro de diálogo de información
II. Notificaciones locales
1 Registro y manejo
El código es el siguiente:
/// Generalmente se registran las notificaciones en el momento del inicio, el programa se cierra y se llama al programa después de hacer clic en la notificación - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { // iOS8 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; [application registerUserNotificationSettings:setting]; } if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) { // Aquí se agrega el código de manejo } devuelve YES; } /// El programa no se ha cerrado (está en primer plano o en segundo plano), después de hacer clic en la notificación se llama a este programa - (void)application:(UIApplication *); application didReceiveLocalNotification:(UILocalNotification *); notification { // Aquí se agrega el código de manejo }
Se puede ver que hay dos métodos para manejar el código, uno es
- (void)application:(UIApplication *); application didReceiveLocalNotification:(UILocalNotification *); notification;
El otro es
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *); launchOptions;
Si el programa no se ha cerrado, es decir, está en primer plano o en segundo plano, entonces llama al primero; si el programa se ha cerrado, llama al segundo.
2 Enviar la notificación
El código es el siguiente
- (IBAction)addLocalNotification { // 1.Crear una notificación local UILocalNotification *localNote = [[UILocalNotification alloc] init]; // 1.1.Establecer el tiempo de envío de la notificación localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; // 1.2.Establecer el contenido de la notificación localNote.alertBody = @"Esto es una notificación Esto es una notificación"; // 1.3.Establecer el texto que se muestra debajo de la fuente cuando el dispositivo está bloqueado localNote.alertAction = @"¡Rápido!!!!!"; localNote.hasAction = YES; // 1.4.Establecer la imagen de inicio (abierta a través de la notificación) localNote.alertLaunchImage = @"../Documents/IMG_0024.jpg"; // 1.5.Establecer el sonido que se reproducirá localNote.soundName = UILocalNotificationDefaultSoundName; // 1.6.Establecer el número que se muestra en la esquina superior izquierda del icono de la aplicación localNote.applicationIconBadgeNumber = 999; // 1.7.Establecer información adicional localNote.userInfo = @{@"qq" : @"704711253", @"msg" : @"success"}; // 2.Ejecutar la notificación [[UIApplication sharedApplication] scheduleLocalNotification:localNote]; }
El efecto es el siguiente:
3 Cancelar la notificación
// Cancelar todas las notificaciones locales
[application cancelAllLocalNotifications];
Tercero, envío remoto
A diferencia del servicio de notificaciones push que implementamos nosotros mismos en Android, Apple controla estrictamente los dispositivos, y el flujo de notificaciones debe pasar por APNs (Apple Push Notification service).
Generalmente, si un programa se desplaza al fondo no puede ejecutar código (Audio, VoIP, etc. que pueden ejecutarse en segundo plano), o si el programa sale, entonces se desconecta del servidor en segundo plano de la aplicación correspondiente, y no recibe información del servidor, pero cada dispositivo, siempre que esté conectado a Internet, establece una conexión IP persistente con el servidor APNs de Apple, de modo que, a través del servidor APNs de Apple, nuestro propio servidor puede mantener una conexión indirecta con el dispositivo. La ilustración es la siguiente:
Pasos a seguir:
1 Marque Backgroud Modes -> Notificaciones remotas, principalmente iOS7después, Apple admite la ejecución en segundo plano, si aquí se abre, cuando se reciba una notificación push, el programa también puede realizar algunas operaciones en segundo plano, como se muestra en la siguiente imagen:
2 El registro de notificaciones push es diferente al de notificaciones locales, iOS8.0 antes y después, consulte el código a continuación.
Además, al usar por primera vez la notificación push, puede surgir esta pregunta: didFinishLaunchingWithOptions se llama cada vez que se abre el programa, ¿es que la función de registro se llama cada vez y se pregunta al usuario "¿Permite las notificaciones push?"? En realidad, esta ventana solo se abrirá una vez al abrir el programa por primera vez, ya sea que el usuario permita o no permita, Apple recordará la elección del usuario y las llamadas repetidas a la función de registro no tendrán mucho impacto en el usuario
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // iOS8deberíamos tratarlos de manera distinta después y antes if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; } [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIUserNotificationTypeSound]; } devuelve YES; } /// El significado de esta función es que cuando el usuario desactiva las notificaciones en la configuración, al iniciar el programa se llama a esta función y podemos obtener la configuración del usuario - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [application registerForRemoteNotifications]; }
3 Si el registro falla, por ejemplo, sin certificados, se llamará a:}}
/// Llamar al registro de falla - (void)application:(UIApplication *application didFailToRegisterForRemoteNotificationsWithError:(NSError *error { NSLog(@"Fallo en el registro de notificaciones remotas: %@",error); }
4 Obtener deviceToken
Si el usuario acepta, Apple generará el deviceToken basado en el bundleID de la aplicación y el UDID del teléfono, luego llamará al método didregister de application para devolver el devicetoken, la aplicación debe enviar el devicetoken al servidor de la aplicación, el servidor tiene la obligación de guardarlo (si se permite el inicio de sesión múltiple, puede almacenar múltiples devicetoken). El deviceToken también puede cambiar: "Si el usuario restaura los datos de respaldo a un nuevo dispositivo o computadora o reinstala el sistema operativo, el device token cambia", por lo tanto, se debe enviar al servidor (proveedor) cada vez
/// Después de que el usuario acepte, se llama a este programa para obtener el deviceToken del sistema, se debe transmitir el deviceToken al servidor para su almacenamiento, esta función se llama cada vez que se inicia la aplicación (a menos que el usuario permita las notificaciones) - (void)application:(UIApplication *application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *deviceToken { NSLog(@"deviceToken = %@",deviceToken); }
5 cuando el usuario hace clic en la notificación
se abrirá la aplicación por defecto. Hay tres funciones de manejo de código, divididas en iOS7antes y después y si la aplicación está en segundo plano
5.1 iOS7y después
Esta función se llama ya sea que la aplicación esté muerta o en segundo plano, siempre que el usuario haga clic en la notificación, por lo que si es iOS7no es necesario realizar el manejo en didFinishLaunchingWithOptions, solo se debe manejar en la función siguiente, evitando hacer duplicados en la función didFinishLaunchingWithOptions.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // userInfo }
Nota: cuando se abre la ejecución en segundo plano en el primer paso, incluso si el usuario no hace clic en la notificación, también se puede ejecutar:
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler
5.2 iOS7antes
cuando el usuario hace clic en la notificación, si el programa se ha matado se llama a la primera función siguiente, si el programa está en segundo plano se llama a la segunda función siguiente, por lo tanto, las dos funciones siguientes deben usarse juntas
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // obtener el mensaje de notificación remota NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; if (userInfo) { // hay mensajes de推送, manejar los mensajes de推送 } devuelve YES; } /// iOS3solo hay, solo cuando el programa está en segundo plano y el usuario hace clic en la notificación, se llama, por lo tanto, se debe usar junto con didFinishLaunchingWithOptions - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // userInfo }
en la programación real, si se desea ser compatible con iOS7antes, las tres funciones se podían usar simultáneamente, todas se enumeran y el sistema selecciona automáticamente la llamada adecuada.
6 resumamos las llamadas a la función:
al iniciar después de la primera instalación:
didRegisterForRemoteNotificationsWithDeviceToken fue llamado
el sistema pregunta al usuario si acepta recibir Notifications
independientemente de si el usuario acepta o rechaza, didRegisterUserNotificationSettings fue llamado
cuando la aplicación no se inicia por primera vez:
si notifications está en estado denegado: didRegisterUserNotificationSettings fue llamado
si notifications está en estado permitido
didRegisterForRemoteNotificationsWithDeviceToken fue llamado
se llama a didRegisterUserNotificationSettings
El usuario modifica las configuraciones de notifications durante la ejecución de la aplicación:
De denegado a permitido: se llama a didRegisterForRemoteNotificationsWithDeviceToken
De permitido a denegado: no ocurre nada
7 Formato de la notificación enviada por el servidor
{ "aps" : { // Debe haber "alert" : "cadena", "body" : "cadena", "badge" : número, "sound" : "cadena" }, "NotiId" : 20150821, // Valor personalizado de clave }
8 Límite de tamaño de la notificación
El tamaño de la notificación remota varía según la API utilizada por el servidor. Cuando se utiliza HTTP/2 la API del proveedor, el tamaño máximo de la carga es4kB; cuando se utiliza el interfaz binario legacy, el tamaño máximo de la carga es2kB. Cuando el tamaño de la carga excede el tamaño de carga especificado, APNs rechazará enviar esta notificación.
9 El conjunto completo se muestra en la imagen a continuación (tomando como ejemplo el push de WeChat):
10 Finalmente,还需要申请证书,这里不再详述-_-
Este artículo ha sido organizado en el 'Tutorial de Push de iOS', bienvenidos a aprender y leer.
Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y que todos los demás lo apoyen y alienten el tutorial de grito.
Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha editado de manera humana y no asume ninguna responsabilidad legal relevante. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.