notificaciones clave autenticación apple apns ios json swift push-notification userinfo

ios - clave - Swift leyó userInfo de notificaciones remotas



push notifications firebase swift (4)

La alerta debe mostrarse mientras la aplicación está en estado activo. Entonces, verifique que el estado esté activo o no.

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { if application.applicationState == .active { if let aps = userInfo["aps"] as? NSDictionary { if let alertMessage = aps["alert"] as? String { let alert = UIAlertController(title: "Notification", message: alertMessage, preferredStyle: UIAlertControllerStyle.alert) let action = UIAlertAction(title: "Ok", style: .default, handler: nil) alert.addAction(action) self.window?.rootViewController?.present(alert, animated: true, completion: nil) } } } completionHandler(.newData) }

Si un usuario necesita un mensaje, puede recibir un mensaje de alerta.

Implementé una función para abrir un AlertView cuando recibo una notificación remota como esta:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]){ var notifiAlert = UIAlertView() var NotificationMessage : AnyObject? = userInfo["alert"] notifiAlert.title = "TITLE" notifiAlert.message = NotificationMessage as? String notifiAlert.addButtonWithTitle("OK") notifiAlert.show() }

Pero NotificationMessage siempre es nulo.

Mi carga de json se ve así:

{"aps":{"alert":"Testmessage","badge":"1"}}

Estoy usando Xcode 6, Swift y estoy desarrollando para iOS8. Busqué horas ahora, pero no encontré ninguna información útil. Las notificaciones funcionan perfectamente ... y si hago clic en ella, se abre la vista de alerta. Mi problema es que no puedo obtener los datos de userInfo.


El elemento de nivel raíz del diccionario userInfo es "aps" , no "alert" .

Pruebe lo siguiente:

if let aps = userInfo["aps"] as? NSDictionary { if let alert = aps["alert"] as? NSDictionary { if let message = alert["message"] as? NSString { //Do stuff } } else if let alert = aps["alert"] as? NSString { //Do stuff } }

Ver la documentación de notificaciones push


Método (swift4):

func extractUserInfo(userInfo: [AnyHashable : Any]) -> (title: String, body: String) { var info = (title: "", body: "") guard let aps = userInfo["aps"] as? [String: Any] else { return info } guard let alert = aps["alert"] as? [String: Any] else { return info } let title = alert["title"] as? String ?? "" let body = alert["body"] as? String ?? "" info = (title: title, body: body) return info }

Uso:

let info = self.extractUserInfo(userInfo: userInfo) print(info.title) print(info.body)


Para mí, cuando envío el mensaje de Accengage , el siguiente código funciona:

private func extractMessage(fromPushNotificationUserInfo userInfo:[NSObject: AnyObject]) -> String? { var message: String? if let aps = userInfo["aps"] as? NSDictionary { if let alert = aps["alert"] as? NSDictionary { if let alertMessage = alert["body"] as? String { message = alertMessage } } } return message }

La única diferencia con la respuesta de Craing Stanford es la key que usé para extraer el mensaje de la instancia de alert , que es el body que es diferente. Consulte a continuación para obtener más aclaración:

if let alertMessage = alert["message"] as? NSString

vs

if let alertMessage = alert["body"] as? String