Manejo de las notificaciones push en iOS
improve this page | report issueVisió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: **
- Asegúrese de haber leído las siguientes guías de aprendizaje:
- MobileFirst Server para ejecutar localmente, o un remotamente ejecutando MobileFirst Server.
- MobileFirst CLI instalado en la estación de trabajo del desarrollador
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
-
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.
- Guarde y cierre el podfile.
- Desde una ventana de línea de mandatos, vaya a la carpeta raíz del proyecto.
- Ejecute el mandato
pod install
- 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
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.