AppboyKit (también conocido como SDK Objective-C) ya no recibe soporte y ha sido sustituido por Swift SDK. Ya no recibirá nuevas características, correcciones de errores, actualizaciones de seguridad ni soporte técnico; sin embargo, la mensajería y los análisis seguirán funcionando con normalidad. Para obtener más información, consulta Presentación del nuevo SDK Swift de Braze.
¿Buscas la guía básica de integración del desarrollador de mensajes dentro de la aplicación? Encuéntralo here.
Guía de implementación de la mensajería dentro de la aplicación
Esta guía de implementación opcional y avanzada abarca consideraciones sobre códigos de mensajes dentro de la aplicación, tres casos de uso personalizados creados por nuestro equipo y fragmentos de código que los acompañan. ¡Visita nuestro repositorio de demostraciones Braze aquí! Esta guía de implementación se centra en una implementación Swift, pero se proporcionan fragmentos de código Objective-C para los interesados. ¿Buscas implementaciones HTML? ¡Echa un vistazo a nuestro repositorio de plantillas HTML!
Consideraciones sobre códigos
La siguiente guía ofrece una integración personalizada opcional para desarrolladores que se puede utilizar además de los mensajes predeterminados dentro de la aplicación. Se incluyen controladores de vista personalizados con cada caso de uso, que ofrecen ejemplos para ampliar la funcionalidad y personalizar de forma nativa el aspecto de tus mensajes dentro de la aplicación.
Subclases de ABKInAppMessage
El siguiente fragmento de código es un método delegado de interfaz de usuario del SDK de Braze que determina con qué vista de subclase quieres rellenar tu mensaje dentro de la aplicación. En esta guía cubrimos una implementación básica y mostramos cómo las subclases completo, deslizar hacia arriba y modal pueden implementarse de forma cautivadora. Ten en cuenta que si quieres configurar tu controlador de vista personalizado, debes configurar todas las demás subclases de mensajes dentro de la aplicación. Una vez que tengas una sólida comprensión de los conceptos que hay detrás de las subclases, consulta nuestros casos de uso para empezar a implementar subclases de mensajería dentro de la aplicación.
Subclases de ABKInAppMessage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
extension AppboyManager: ABKInAppMessageUIDelegate {
func inAppMessageViewControllerWith(_ inAppMessage: ABKInAppMessage) -> ABKInAppMessageViewController {
switch inAppMessage {
case is ABKInAppMessageSlideup:
return slideupViewController(inAppMessage: inAppMessage) //Custom Method
case is ABKInAppMessageModal:
return modalViewController(inAppMessage: inAppMessage) //Custom Method
case is ABKInAppMessageFull:
return fullViewController(inAppMessage: inAppMessage) //Custom Method
case is ABKInAppMessageHTML:
return ABKInAppMessageHTMLViewController(inAppMessage: inAppMessage)
default:
return ABKInAppMessageViewController(inAppMessage: inAppMessage)
}
}
}
Subclases de ABKInAppMessage
1
2
3
4
5
6
7
8
9
10
11
12
13
- (ABKInAppMessageViewController *)inAppMessageViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage {
if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {
return [self slideupViewControllerWithInAppMessage:inAppMessage]; //Custom Method
} else if ([inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {
return [self modalViewControllerWithInAppMessage:inAppMessage]; //Custom Method
} else if ([inAppMessage isKindOfClass:[ABKInAppMessageFull class]]) {
return [self fullViewControllerWithInAppMessage:inAppMessage]; //Custom Method
} else if ([inAppMessage isKindOfClass:[ABKInAppMessageHTML class]]) {
return [[ABKInAppMessageHTMLViewController alloc] initWithInAppMessage:inAppMessage];
} else {
return [[ABKInAppMessageViewController alloc] initWithInAppMessage:inAppMessage];
}
}
Casos prácticos
A continuación te presentamos tres casos de uso. Cada caso de uso ofrece una explicación detallada, fragmentos de código relevantes y una visión de cómo pueden verse y utilizarse los mensajes dentro de la aplicación en el panel de Braze:
- Mensaje personalizado deslizable dentro de la aplicación
- Mensaje modal personalizado dentro de la aplicación
- Mensaje completo personalizado dentro de la aplicación
Mensaje personalizado deslizable dentro de la aplicación

Mientras creas tu mensaje deslizable dentro de la aplicación, puede que notes que no puedes modificar la ubicación del mensaje utilizando los métodos predeterminados. Una modificación como esta es posible subclasificando ABKInAppMessageSlideupViewController y sustituyendo la variable offset por tu propia variable personalizada. La imagen de la derecha muestra un ejemplo de cómo se puede utilizar esto para ajustar tus mensajes deslizantes dentro de la aplicación.
Visita la página SlideFromBottomViewController para empezar.
Añadir un comportamiento adicional a nuestra interfaz predeterminada
**Actualiza la variable offset **
Actualiza la variable offset y establece tu propio desplazamiento para adaptarlo a tus necesidades.
1
2
3
func setSlideConstraint() {
offset = 0
}
1
2
3
4
5
6
7
8
override var offset: CGFloat {
get {
return super.offset
}
set {
super.offset = newValue + adjustedOffset
}
}
Version 3.34.0 or earlier
**Actualiza la variable slideConstraint **
La variable pública slideConstraint procede de la superclase ABKInAppMessageSlideupViewController.
1
2
3
func setSlideConstraint() {
slideConstraint?.constant = bottomSpacing
}
1
2
3
private var bottomSpacing: CGFloat {
return AppboyManager.shared.activeApplicationViewController.topMostViewController().view.safeAreaInsets.bottom
}
Visita el repositorio de demostraciones Braze para ver la función topMostViewController().
**Actualiza la variable offset **
Actualiza la variable offset y establece tu propio desplazamiento para adaptarlo a tus necesidades.
1
2
3
- (void)setOffset {
self.offset = 0;
}
1
2
3
4
5
6
7
- (CGFloat)offset {
return [super offset];
}
- (void)setOffset:(CGFloat)offset {
[super setOffset:offset + [self adjustedOffset]];
}
Version 3.34.0 or earlier
**Actualiza la variable slideConstraint **
La variable pública slideConstraint procede de la superclase ABKInAppMessageSlideupViewController.
1
2
3
- (void)self.setSlideConstraint:(NSLayoutConstraint *)slideConstraint {
slideConstraint.constant = bottomSpacing;
}
1
2
3
- (CGFloat)bottomSpacing {
return [AppboyManager shared].activeApplicationViewController.topMostViewController.view.safeAreaInsets.bottom;
}
Anular y configurar restricción personalizada
Anula beforeMoveInAppMessageViewOnScreen() y establece tu propio valor de restricción personalizado para adaptarlo a tus necesidades. El valor original se establece en la superclase.
1
2
3
4
override func beforeMoveInAppMessageViewOnScreen() {
super.beforeMoveInAppMessageViewOnScreen()
setOffset()
}
Version 3.34.0 or earlier
1
2
3
override func beforeMoveInAppMessageViewOnScreen() {
setSlideConstraint()
}
Anular y configurar restricción personalizada
Anula beforeMoveInAppMessageViewOnScreen() y establece tu propio valor de restricción personalizado para adaptarlo a tus necesidades. El valor original se establece en la superclase.
1
2
3
4
- (void)beforeMoveInAppMessageViewOnScreen {
[super beforeMoveInAppMessageViewOnScreen];
[self setOffset];
}
Version 3.34.0 or earlier
1
2
3
- (void)beforeMoveInAppMessageViewOnScreen {
[self setSlideConstraint:self.slideConstraint];
}
Ajustar la restricción para la orientación del dispositivo
Ajusta el valor correspondiente en viewWillTransition() porque la subclase asume la responsabilidad de mantener sincronizada la restricción durante los cambios de diseño.
Mensaje modal personalizado dentro de la aplicación

Una ABKInAppMessageModalViewController puede subclasificarse para aprovechar una UIPickerView que ofrezca formas atractivas de recopilar valiosos atributos de usuario. El mensaje modal personalizado dentro de la aplicación te permite utilizar Contenido conectado o cualquier lista disponible para mostrar y capturar atributos de una lista dinámica de elementos.
Puedes interponer tus propias vistas en mensajes dentro de la aplicación subclasificados. Este ejemplo muestra cómo puede utilizarse un UIPickerView para ampliar la funcionalidad de un ABKModalInAppMessageViewController.
Visita el ModalPickerViewController para empezar.
Configuración del panel de control
Para configurar un mensaje modal dentro de la aplicación en el panel, debes proporcionar una lista de elementos formateada como una cadena separada por comas. En nuestro ejemplo, utilizamos Contenido conectado para extraer una lista JSON de nombres de equipos y darles el formato correspondiente.

En los pares clave-valor, proporciona un attribute_key; esta clave, junto con el valor seleccionado por el usuario, se guardará en su perfil de usuario como un atributo personalizado. Tu lógica de vista personalizada debe gestionar los atributos de usuario enviados a Braze.
El diccionario extras del objeto ABKInAppMessage te permite consultar una clave view_type (si existe) que indique la vista correcta que se debe mostrar. Es importante tener en cuenta que los mensajes dentro de la aplicación se configuran para cada mensaje, por lo que las vistas modales personalizadas y predeterminadas pueden funcionar armoniosamente.

Utilizando view_type para el comportamiento de visualización de la IU
Consulta el diccionario extras de tu view_type para cargar el controlador de vista subclase deseado.
1
2
3
4
5
6
7
8
func modalViewController(inAppMessage: ABKInAppMessage) -> ABKInAppMessageModalViewController {
switch inAppMessage.extras?[InAppMessageKey.viewType.rawValue] as? String {
case InAppMessageViewType.picker.rawValue:
return ModalPickerViewController(inAppMessage: inAppMessage)
default:
return ABKInAppMessageModalViewController(inAppMessage: inAppMessage)
}
}
Utilizando view_type para el comportamiento de visualización de la IU
Consulta el diccionario extras de tu view_type para cargar el controlador de vista subclase deseado.
1
2
3
4
5
6
7
8
9
10
11
- (ABKInAppMessageModalViewController *)modalViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage {
InAppMessageData *inAppMessageData = [[InAppMessageData alloc] init];
NSString *key = [inAppMessageData rawValueForInAppMessageKey:InAppMessageKeyViewType];
NSString *viewType = [inAppMessageData rawValueForInAppMessageViewType:InAppMessageViewTypePicker];
if ([inAppMessage.extras objectForKey:key] && [inAppMessage.extras[key] isEqualToString:viewType]) {
return [[ModalViewController alloc] initWithInAppMessage:inAppMessage];
} else {
return [[ABKInAppMessageModalViewController alloc] initWithInAppMessage:inAppMessage];
}
}
Anula y proporciona una vista personalizada
Anula loadView() y configura tu propia vista personalizada para adaptarla a tus necesidades.
1
2
3
4
5
6
7
override var nibname: String{
return "ModalPickerViewController"
}
override func loadView() {
Bundle.main.loadNibNamed(nibName, owner: self, options: nil)
}
Anula y proporciona una vista personalizada
Anula loadView() y configura tu propia vista personalizada para adaptarla a tus necesidades.
1
2
3
4
- (void)loadView {
NSString *nibName = @"ModalPickerViewController";
[[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
}
Variables de formato para una lista dinámica
Antes de recargar los componentes de UIPickerView, la variable de mensaje inAppMessage se muestra como una cadena. Este mensaje debe formatearse como una matriz de elementos para que se muestre correctamente. Como ejemplo, esto se puede conseguir utilizando components(separatedBy: ", ").
1
2
3
4
5
6
override func viewDidLoad() {
super.viewDidLoad()
items = inAppMessage.message.separatedByCommaSpaceValue
pickerView.reloadAllComponents()
}
Variables de formato para PickerView
Antes de recargar los componentes de UIPickerView, la variable de mensaje inAppMessage se muestra como una cadena. Este mensaje debe formatearse como una matriz de elementos para que se muestre correctamente. Por ejemplo, esto se puede conseguir utilizando componentsSeparatedByString.
1
2
3
4
5
6
- (void)viewDidLoad {
[super viewDidLoad];
self.items = [[NSArray alloc] initWithArray:[self.inAppMessage.message componentsSeparatedByString:@", "]];
[self.pickerView reloadAllComponents];
}
Asignar atributo personalizado
Utilizando la subclase, después de que un usuario pulse enviar, pasa el atributo con su correspondiente valor seleccionado a Braze.
1
2
3
4
5
@IBAction func primaryButtonTapped(_ sender: Any) {
guard let item = selectedItem, !item.isEmpty, let attributeKey = inAppMessage.extras?[InAppMessageKey.attributeKey.rawValue] as? String else { return }
AppboyManager.shared.setCustomAttributeWithKey(attributeKey, andStringValue: item)
}
Asignar atributo personalizado
Utilizando la subclase, después de que un usuario pulse enviar, pasa el atributo con su correspondiente valor seleccionado a Braze.
1
2
3
4
5
6
7
8
- (IBAction)primaryButtonTapped:(id)sender {
InAppMessageData *inAppMessageData = [[InAppMessageData alloc] init];
NSString *key = [inAppMessageData rawValueForInAppMessageKey:InAppMessageKeyAttributeKey];
if (self.selectedItem.length > 0 && [self.inAppMessage.extras objectForKey:key]) {
[[AppboyManager shared] setCustomAttributeWithKey:self.inAppMessage.extras[key] andStringValue:self.selectedItem];
}
}
¿Te interesa aprovechar nuestros mensajes modales personalizados dentro de la aplicación para compartir videos a través de FaceTime? Consulta nuestra guía de implementación de mensajes dentro de la aplicación de SharePlay.
Mensaje completo personalizado dentro de la aplicación

Utiliza mensajes completos personalizados dentro de la aplicación para crear avisos interactivos y fáciles de usar para recopilar valiosos datos de clientes. El ejemplo de la derecha muestra una implementación del mensaje completo personalizado dentro de la aplicación reimaginado como una cartilla push interactiva con preferencias de notificación.
Visita la página FullListViewController para empezar.
Configuración del panel de control
Para configurar un mensaje completo personalizado dentro de la aplicación en el panel, debes proporcionar una lista de tus etiquetas formateadas como una cadena separada por comas.
En los pares clave-valor, proporciona un attribute_key; esta clave, junto con los valores seleccionados por el usuario, se guardará en su perfil de usuario como un atributo personalizado. Tu lógica de vista personalizada debe gestionar los atributos de usuario enviados a Braze.

Interceptar toques de mensajes dentro de la aplicación
Interceptar los toques de mensajes dentro de la aplicación es crucial para que los botones personalizados de mensajes completos dentro de la aplicación funcionen correctamente. Por predeterminado, ABKInAppMessageImmersive añade un reconocedor de gestos de pulsación sobre el mensaje, para que los usuarios puedan descartar mensajes sin botones. Al añadir un UISwitch o un botón a la jerarquía de la vista UITableViewCell, los toques pasan a ser gestionados por nuestra vista personalizada. A partir de iOS 6, los botones y otros controles tienen preferencia cuando trabajan con reconocedores de gestos, lo que hace que nuestro mensaje dentro de la aplicación personalizado funcione como debería.
Editar esta página en GitHub