iOS: Personalizaciones
En esta página profundizaremos en varios aspectos de nuestra biblioteca para iOS que pueden personalizarse según tus necesidades.
Múltiples entornos
Por defecto, creamos dos aplicaciones diferentes en Notificare, utilizando entornos separados para desarrollo y producción, por varias razones, incluida la diferencia entre los servidores APNS en modo debug y producción. En este escenario, tendrás al menos dos archivos de configuración: uno para tu app de DEV y otro para la de PROD. Tienes total libertad para configurar el proceso de compilación como prefieras, pero el único requisito es que el archivo NotificareServices.plist
esté presente en la app compilada. Sin embargo, puedes consultar nuestra recomendación sobre cómo configurarlo en este artículo aquí.
Establecer claves en código
En lugar de depender del archivo de configuración depositado en tu TransferBox, es posible establecer las claves directamente en código. Para configurar Notificare, debes ejecutar el siguiente código antes de cualquier otra interacción con la biblioteca:
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Punto de personalización después del lanzamiento de la aplicación.
Notificare.shared.configure(
servicesInfo: NotificareServicesInfo(
applicationKey: "",
applicationSecret: ""
),
options: nil
)
// más código ...
}
}
El método configure()
debe llamarse antes de Notificare.shared.launch()
para asegurarse de que se usen las claves correctas. Después de establecer las claves mediante código, puedes eliminar con seguridad el archivo NotificareServices.plist
.
Además, debes informar a Notificare que no se configure automáticamente después de que se inicie la aplicación. Para hacerlo, establece AUTO_CONFIG
como NO
en tu archivo NotificareOptions.plist
.
Desactivar el method swizzling
Nuestra biblioteca realiza method swizzling para manejar automáticamente los métodos relevantes de APNS en tu AppDelegate
. Si prefieres no utilizarlo, puedes establecer SWIZZLING_ENABLED
como NO
en tu archivo NotificareOptions.plist
. Sin embargo, al hacer esto, tendrás que reenviar manualmente esos métodos a nuestra biblioteca. A continuación, un ejemplo de cómo hacerlo:
class AppDelegate: NSObject, UIApplicationDelegate {
// ...
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Notificare.shared.push().application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Notificare.shared.push().application(application, didFailToRegisterForRemoteNotificationsWithError: error)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Notificare.shared.push().application(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler)
}
}
Desactivar el delegado de UNUserNotificationCenter
Nuestra biblioteca, por defecto, se asigna a sí misma como delegado de UNUserNotificationCenter
, gestionando automáticamente toda la implementación por ti. Si deseas un comportamiento diferente, puedes desactivarlo e implementarlo tú mismo en tu aplicación. Esto se hace estableciendo la propiedad USER_NOTIFICATION_CENTER_DELEGATE_ENABLED
como NO
en el archivo NotificareOptions.plist
. Una vez desactivado, tendrás que implementar los siguientes métodos:
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// Más código...
// Pasar el evento a Notificare.
Notificare.shared.push().userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// Más código...
// Pasar el evento a Notificare.
Notificare.shared.push().userNotificationCenter(center, willPresent: notification, withCompletionHandler: completionHandler)
}
func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification?) {
// Más código...
// Pasar el evento a Notificare.
Notificare.shared.push().userNotificationCenter(center, openSettingsFor: notification)
}
}
NotificareOptions.plist
Puedes personalizar varios mecanismos, apariencias y opciones a través del archivo NotificareOptions.plist
. Todas las propiedades son opcionales, por lo que puedes elegir cuáles deseas modificar. A continuación se muestra el código fuente con todas las propiedades posibles:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>DEBUG_LOGGING_ENABLED</key>
<true/>
<key>AUTO_CONFIG</key>
<true/>
<key>SWIZZLING_ENABLED</key>
<true/>
<key>USER_NOTIFICATION_CENTER_DELEGATE_ENABLED</key>
<true/>
<key>PRESERVE_EXISTING_NOTIFICATION_CATEGORIES</key>
<false/>
<key>CRASH_REPORTING_ENABLED</key>
<true/>
<key>HEADING_API_ENABLED</key>
<true/>
<key>VISITS_API_ENABLED</key>
<true/>
<key>URL_SCHEMES</key>
<array>
<string>com.example.app</string>
</array>
<key>CLOSE_WINDOW_QUERY_PARAMETER</key>
<string>notificareCloseWindow</string>
<key>IMAGE_SHARING_ENABLED</key>
<true/>
<key>SAFARI_DISMISS_BUTTON_STYLE</key>
<integer>0</integer>
<key>THEMES</key>
<dict>
<key>LIGHT</key>
<dict>
<key>BACKGROUND_COLOR</key>
<string>#000000</string>
<key>ACTION_BUTTON_TEXT_COLOR</key>
<string>#000000</string>
<key>TOOLBAR_BACKGROUND_COLOR</key>
<string>#000000</string>
<key>ACTIVITY_INDICATOR_COLOR</key>
<string>#000000</string>
<key>BUTTON_TEXT_COLOR</key>
<string>#000000</string>
<key>TEXT_FIELD_TEXT_COLOR</key>
<string>#000000</string>
<key>TEXT_FIELD_BACKGROUND_COLOR</key>
<string>#000000</string>
<key>SAFARI_BAR_TINT_COLOR</key>
<string>#000000</string>
<key>SAFARI_CONTROLS_TINT_COLOR</key>
<string>#000000</string>
</dict>
<key>DARK</key>
<dict>
<key>BACKGROUND_COLOR</key>
<string>#FFFFFF</string>
<key>ACTION_BUTTON_TEXT_COLOR</key>
<string>#FFFFFF</string>
<key>TOOLBAR_BACKGROUND_COLOR</key>
<string>#FFFFFF</string>
<key>ACTIVITY_INDICATOR_COLOR</key>
<string>#FFFFFF</string>
<key>BUTTON_TEXT_COLOR</key>
<string>#FFFFFF</string>
<key>TEXT_FIELD_TEXT_COLOR</key>
<string>#FFFFFF</string>
<key>TEXT_FIELD_BACKGROUND_COLOR</key>
<string>#FFFFFF</string>
<key>SAFARI_BAR_TINT_COLOR</key>
<string>#FFFFFF</string>
<key>SAFARI_CONTROLS_TINT_COLOR</key>
<string>#FFFFFF</string>
</dict>
</dict>
</dict>
</plist>
Puedes encontrar el código fuente aquí, donde se muestran todas las propiedades disponibles.
Textos localizables
Nuestra biblioteca incluye soporte para múltiples idiomas, los cuales puedes personalizar y ampliar según sea necesario. Solo tienes que incluir las claves de traducción en tu archivo Localizable.strings
y proporcionar los textos deseados.
Puedes encontrar todas las claves de traducción disponibles aquí.
Usar un diccionario de cadenas para plantillas push enriquecidas
En iOS 11, Apple extendió los textos de vista previa oculta a todas las apps. Esto permite mostrar un texto predefinido cuando un usuario elige ocultar el contenido de una notificación en la pantalla de bloqueo o en el centro de notificaciones. Incluye un archivo Localizable.stringsdict
en tu proyecto, como el que se muestra a continuación, para manejar esos textos correctamente.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>MY_RICH_PUSH_TEMPLATE_TITLE</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@question@</string>
<key>question</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>zero</key>
<string></string>
<key>one</key>
<string>%u mensaje espera tu respuesta</string>
<key>two</key>
<string></string>
<key>few</key>
<string></string>
<key>many</key>
<string></string>
<key>other</key>
<string>%u mensajes esperan tu respuesta</string>
</dict>
</dict>
</dict>
</plist>
Si tu aplicación admite varios idiomas, repite esta operación en cada archivo de localización. Esto te permitirá personalizar cómo se muestran las notificaciones en la pantalla de bloqueo cuando la opción Vista previa oculta esté habilitada.