Manejo de las notificaciones push en iOS

improve this page | report issue

Visión general

La API de notificaciones que MobileFirst proporciona sirve para registrar y anular el registro de dispositivos y suscribir y anular la suscripción a etiquetas. En esta guía de aprendizaje, aprenderá a manejar el envío de notificaciones en aplicaciones iOS utilizando Swift.

Para obtener información sobre las notificaciones interactivas o silenciosas, consulte:

**Requisitos previos: **

Ir a:

Configuración de notificaciones

Cree un nuevo proyecto Xcode o utilice uno existente. Si MobileFirst Native iOS SDK todavía no está presente en el proyecto, siga las instrucciones en la guía de aprendizaje Adición de Mobile Foundation SDK para aplicaciones iOS.

Añadir el SDK de push

  1. Abra el podfile existente del proyecto y añada las siguientes líneas:

    use_frameworks!
    
    platform :ios, 8.0
    target "Xcode-project-target" do
         pod 'IBMMobileFirstPlatformFoundation'
         pod 'IBMMobileFirstPlatformFoundationPush'
    end
    
    post_install do |installer|
         workDir = Dir.pwd
    
         installer.pods_project.targets.each do |target|
             debugXcconfigFilename = "#{workDir}/Pods/Target Support Files/#{target}/#{target}.debug.xcconfig"
             xcconfig = File.read(debugXcconfigFilename)
             newXcconfig = xcconfig.gsub(/HEADER_SEARCH_PATHS = .*/, "HEADER_SEARCH_PATHS = ")
             File.open(debugXcconfigFilename, "w") { |file| file << newXcconfig }
    
             releaseXcconfigFilename = "#{workDir}/Pods/Target Support Files/#{target}/#{target}.release.xcconfig"
             xcconfig = File.read(releaseXcconfigFilename)
             newXcconfig = xcconfig.gsub(/HEADER_SEARCH_PATHS = .*/, "HEADER_SEARCH_PATHS = ")
             File.open(releaseXcconfigFilename, "w") { |file| file << newXcconfig }
         end
    end
    
    • Sustituya Xcode-project-target con el nombre de su destino de proyecto Xcode.
  2. Guarde y cierre el podfile.
  3. Desde una ventana de línea de mandatos, vaya a la carpeta raíz del proyecto.
  4. Ejecute el mandato pod install
  5. Abra proyecto utilizando el archivo .xcworkspace.

API de notificaciones

Instancia de MFPPush

Todas las llamadas de API se deben realizar en una instancia de MFPPush. Esto se puede realizar utilizando una var en un controlador de vista, por ejemplo, var push = MFPPush.sharedInstance(); y, a continuación, llamando a push.methodName() a través del controlador de vista.

Otra posibilidad es llamar a MFPPush.sharedInstance().methodName() para cada instancia en la que necesita acceder a los métodos de API de push.

Manejadores de desafíos

Si el ámbito de push.mobileclient está correlacionado con la comprobación de seguridad, debe asegurarse de que existen manejadores de desafíos coincidentes registrados antes de utilizar las API de push.

Aprenda más sobre los manejadores de desafíos en la guía de aprendizaje de validación de credenciales.

Lado del cliente

Métodos Swift Descripción
initialize() Inicia MFPPush con el contexto proporcionado.
isPushSupported() Indica si el dispositivo da soporte a notificaciones push.
registerDevice(completionHandler: ((WLResponse!, NSError!) -> Void)!) Registra el dispositivo con el servicio de notificaciones push.
sendDeviceToken(deviceToken: NSData!) Envía la señal de dispositivo al servidor
getTags(completionHandler: ((WLResponse!, NSError!) -> Void)!) Recupera las etiquetas disponibles en una instancia del servicio de notificaciones push.
subscribe(tagsArray: [AnyObject], completionHandler: ((WLResponse!, NSError!) -> Void)!) Suscribe el dispositivo para las etiquetas especificadas.
getSubscriptions(completionHandler: ((WLResponse!, NSError!) -> Void)!) Recupera todas las etiquetas a las que el dispositivo está actualmente suscrito.
unsubscribe(tagsArray: [AnyObject], completionHandler: ((WLResponse!, NSError!) -> Void)!) Anula la suscripción de una o varias etiquetas.
unregisterDevice(completionHandler: ((WLResponse!, NSError!) -> Void)!) Anula el registro del dispositivo del servicio notificaciones push.

Inicialización

La inicialización es necesaria para que la aplicación de cliente se conecte al servicio MFPPush.

  • Primero se debe llamar al método initialize antes de utilizar cualquier otra API MFPPush.
  • Registra la función de retorno de llamada para manejar las notificaciones push recibidas.
MFPPush.sharedInstance().initialize();

Está push soportado

Comprueba si el dispositivo da soporte a las notificaciones push.

let isPushSupported: Bool = MFPPush.sharedInstance().isPushSupported()

if isPushSupported {
    // Push is supported
} else {
    // Push is not supported
}

Registrar el dispositivo y enviar una señal de dispositivo

Registre el dispositivo para el servicio de notificaciones push.

MFPPush.sharedInstance().registerDevice(nil) { (response, error) -> Void in
    if error == nil {
        self.enableButtons()
        self.showAlert("Registered successfully")
        print(response?.description ?? "")
    } else {
        self.showAlert("Registrations failed.  Error \(error?.localizedDescription)")
        print(error?.localizedDescription ?? "")
    }
}
MFPPush.sharedInstance().sendDeviceToken(deviceToken)

Nota: Habitualmente la llamada se realiza en AppDelegate en el método didRegisterForRemoteNotificationsWithDeviceToken.

Obtener etiquetas

Recupere todas las etiquetas disponibles desde el servicio de notificaciones push.

MFPPush.sharedInstance().getTags { (response, error) -> Void in
    if error == nil {
        print("The response is: \(response)")
        print("The response text is \(response?.responseText)")
        if response?.availableTags().isEmpty == true {
            self.tagsArray = []
            self.showAlert("There are no available tags")
        } else {
            self.tagsArray = response!.availableTags() as! [String]
            self.showAlert(String(describing: self.tagsArray))
            print("Tags response: \(response)")
        }
    } else {
        self.showAlert("Error \(error?.localizedDescription)")
        print("Error \(error?.localizedDescription)")
    }
}

Suscribir

Suscriba las etiquetas deseadas.

var tagsArray: [String] = ["Tag 1", "Tag 2"]

MFPPush.sharedInstance().subscribe(self.tagsArray) { (response, error)  -> Void in
    if error == nil {
        self.showAlert("Subscribed successfully")
        print("Subscribed successfully response: \(response)")
    } else {
        self.showAlert("Failed to subscribe")
        print("Error \(error?.localizedDescription)")
    }
}

Obtener suscripciones

Recupere las etiquetas a las que el dispositivo está actualmente suscrito.

MFPPush.sharedInstance().getSubscriptions { (response, error) -> Void in
   if error == nil {
       var tags = [String]()
       let json = (response?.responseJSON)! as [AnyHashable: Any]
       let subscriptions = json["subscriptions"] as? [[String: AnyObject]]
       for tag in subscriptions! {
           if let tagName = tag["tagName"] as? String {
               print("tagName: \(tagName)")
               tags.append(tagName)
           }
       }
       self.showAlert(String(describing: tags))
   } else {
       self.showAlert("Error \(error?.localizedDescription)")
       print("Error \(error?.localizedDescription)")
   }
}

Anular la suscripción

Anule la suscripción de etiquetas.

var tags: [String] = {"Tag 1", "Tag 2"};

// Unsubscribe from tags
MFPPush.sharedInstance().unsubscribe(self.tagsArray) { (response, error)  -> Void in
    if error == nil {
        self.showAlert("Unsubscribed successfully")
        print(String(describing: response?.description))
    } else {
        self.showAlert("Error \(error?.localizedDescription)")
       print("Error \(error?.localizedDescription)")
   }
}

Anular el registro

Anule el registro del dispositivo de una instancia de servicio de notificaciones push.

MFPPush.sharedInstance().unregisterDevice { (response, error)  -> Void in
   if error == nil {
       // Disable buttons
       self.disableButtons()
       self.showAlert("Unregistered successfully")
       print("Subscribed successfully response: \(response)")
   } else {
       self.showAlert("Error \(error?.localizedDescription)")
       print("Error \(error?.localizedDescription)")
   }
}

Manejar una notificación push

La infraestructura iOS nativa maneja directamente las notificaciones push. Dependiendo del ciclo de vida de su aplicación, la infraestructura iOS llamará a distintos métodos.

Por ejemplo si se recibe una notificación simple mientras se ejecuta la aplicación, se desencadenará el didReceiveRemoteNotification de AppDelegate:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    print("Received Notification in didReceiveRemoteNotification \(userInfo)")
    // display the alert body
      if let notification = userInfo["aps"] as? NSDictionary,
        let alert = notification["alert"] as? NSDictionary,
        let body = alert["body"] as? String {
          showAlert(body)
        }
}

Encontrará más información sobre cómo manejar las notificaciones en iOS en la documentación de Apple

Imagen de la aplicación de ejemplo

Aplicación de ejemplo

Pulse para descargar el proyecto Xcode.

Uso de ejemplo

Siga el archivo README.md de ejemplo para obtener instrucciones.

Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.
Last modified on February 27, 2020