es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React-Native (0.64.1) y Extensión de Notificaciones.

Estoy intentando integrar una Extensión de Notificación en mi aplicación react-native utilizando el SDK de Batch. Sin embargo, tengo el siguiente error:

‘sharedApplication’ no está disponible: no disponible en iOS (Extensión de aplicación) – Use soluciones basadas en controladores de vista cuando sea apropiado en su lugar.

Aquí está mi archivo pod:

require_relative ‘../node_modules/react-native/scripts/react_native_pods’
require_relative ‘../node_modules/@react-native-community/cli-platform-ios/native_modules’

platform :ios, ‘10.0’
abstract_target ‘BrandName’ do
config = use_native_modules!

use_react_native!(
:path => config[:reactNativePath],
# para habilitar hermes en iOS, cambiar false a true y luego instalar pods
:hermes_enabled => false
)

permissions_path = ‘../node_modules/react-native-permissions/ios/’
pod ‘Permission-Notifications’, :path => “#{permissions_path}/Notifications”

target ‘BrandNameApp’ do
# Pods específicos de producción

target 'BrandNameAppTests' do
    inherit! :complete
    # Pods para pruebas
end

end

target ‘BrandNameAppDevelopment’ do
# Pods específicos de desarrollo
end

target ‘BrandNameAppStage’ do
# Pods específicos de etapa
end

target ‘RichNotificationsExtension’ do
# Pods específicos de extensión
pod ‘BatchExtension-ObjC’
end

# Habilita Flipper.
#
# Tenga en cuenta que si tiene use_frameworks! habilitado, Flipper no funcionará y
# debe desactivar la línea siguiente.
use_flipper!()

post_install do |installer|
react_native_post_install(installer)
end
end

Si intento poner mi objetivo ‘RichNotificationsExtension’ en otro lugar en mi archivo pod, el módulo no será encontrado por el archivo de extensión.

He intentado configurar “Require Only App-extension-safe API” en “NO” como he visto en algunas respuestas, pero Xcode ya no me permitirá construir y si lo fuerzo en mi archivo pod, el módulo tampoco se encontrará.

¿Alguien tiene un archivo pod funcional en react-native trabajando con una extensión?

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para integrar una extensión de notificaciones en una aplicación React-Native con Batch SDK

    El mensaje de error sharedApplication no está disponible: no está disponible en iOS (extensión de aplicación) - Utiliza soluciones basadas en controlador de vista cuando sea adecuado. ocurre porque el objeto UIApplication no está disponible en las extensiones de notificaciones ya que se ejecutan en un proceso separado de la aplicación principal.

    Para solucionar este problema, puede utilizar los métodos delegados proporcionados por iOS UNNotificationServiceExtension para manejar las notificaciones. Estos métodos se ejecutan en el proceso de la extensión y le permiten modificar el contenido de las notificaciones entrantes.

    Estos son los pasos que puede seguir para integrar una extensión de notificación en su aplicación React-Native con Batch SDK:

    1. Agregue el pod BatchExtension-ObjC a su objetivo de extensión en su archivo podfile de la siguiente manera:
    objetivo 'RichNotificationsExtension' hacer
      vaina 'BatchExtension-ObjC'
    fin
    
    1. Declare la clase BatchPushServiceExtension como la UNNotificationServiceExtension en su archivo Info.plist.
    <key>NSExtensionPrincipalClass</key>
    <string>BatchPushServiceExtension</string>
    
    1. Implemente el método didReceiveNotificationRequest:withContentHandler: del protocolo UNNotificationServiceExtension en su archivo BatchPushServiceExtension.m.
    - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
      [BatchPush handleRichPushRequest: request withContentHandler: contentHandler];
    }
    
    1. En su aplicación React-Native, importe el módulo Batch e inicialícelo de la siguiente manera:
    import Batch from '@bam.tech/react-native-batch';
    
    Batch.start();
    Batch.setNotificationsReceptionModeAutomatic();
    
    1. Desencadene una notificación desde su servidor con una carga útil personalizada que incluya la URL para abrir y el tipo de notificación.
    {
      "alert": "¡Hola Mundo!",
      "batch": {
        "url": "https://www.example.com/",
        "type": "mi_tipo_de_notificación"
      }
    }
    
    1. En su objetivo de extensión de notificación, utilice Batch SDK para recuperar y manejar la carga útil personalizada.
    - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
      [BatchPush handleRichPushRequest: request withContentHandler: contentHandler completion:^(BOOL handled) {
        if (!handled) {
          UNMutableNotificationContent* content = [request.content mutableCopy];
    
          NSDictionary* batchPayload = [BatchPush userActionDictionaryFromNotificationUserInfo:request.content.userInfo];
    
          if (batchPayload != nil && [batchPayload isKindOfClass:[NSDictionary class]]) {
            NSString* notificationType = batchPayload[@"type"];
            NSString* notificationUrl = batchPayload[@"url"];
    
            if ([notificationType isEqualToString:@"mi_tipo_de_notificación"]) {
              // Maneje la notificación aquí
            }
          }
    
          contentHandler(content);
        }
      }];
    }
    
    1. Compile y ejecute su objetivo de extensión de notificación para probar la integración.

    Siguiendo estos pasos, debería poder integrar una extensión de notificación en su aplicación React-Native con Batch SDK y manejar cargas útiles personalizadas en la extensión.

Comments are closed.