Push notifications

Registrar device tokens, manejar notificaciones y deeplinks.

Configuración con PushConfig

Configura los callbacks de push en SouthGamesSDK.init():

await SouthGamesSDK.init(
  apiKey: 'sg_live_xxx',
  orgId: 'mi-empresa',
  pushConfig: PushConfig(
    // Pedir permisos al inicializar (default: true)
    requestPermissionOnInit: true,

    // Mostrar notificaciones en foreground (default: true)
    showForegroundNotifications: true,

    // Callback cuando el usuario toca una notificación
    onNotificationTap: (message) {
      print('Tap: ${message.notification?.title}');
    },

    // Callback en foreground
    onForegroundMessage: (message) {
      print('Recibida: ${message.notification?.title}');
    },

    // Callback automático para deeplinks (ver abajo)
    onDeeplinkReceived: (deeplink, message) {
      navigatorKey.currentState?.pushNamed(deeplink);
    },
  ),
);

El SDK obtiene el token FCM y lo registra automáticamente al llamar identify().

Deeplinks

Las notificaciones push pueden incluir un deeplink que se abre al tocar la notificación. El deeplink se configura desde el dashboard al crear el push.

Manejo automático

Si configuras onDeeplinkReceived en PushConfig, el SDK extrae el deeplink automáticamente y llama al callback:

PushConfig(
  onDeeplinkReceived: (deeplink, message) {
    // deeplink = "myapp://promo/verano"
    // deeplink = "https://miapp.com/oferta"
    // deeplink = "/promo/verano"
    navigatorKey.currentState?.pushNamed(deeplink);
  },
)

El callback se ejecuta después de onNotificationTap, solo si la notificación contiene un deeplink.

Manejo manual

También puedes extraer el deeplink manualmente desde cualquier RemoteMessage:

import 'package:southgames_flutter/southgames_flutter.dart';

final deeplink = SouthGamesPush.getDeeplink(message);
if (deeplink != null) {
  // Navegar a la pantalla correspondiente
}

Payload

El deeplink se envía como data.deeplink en el payload push:

{
  "notification": {
    "title": "¡Oferta especial!",
    "body": "20% de descuento en tu próxima compra"
  },
  "data": {
    "sendId": "abc123",
    "deeplink": "myapp://promo/verano"
  }
}

Background handler

Para rastrear notificaciones recibidas en background, registra el handler en main.dart:

@pragma('vm:entry-point')
Future<void> _firebaseBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  await SouthGamesSDK.handleBackgroundMessage(message);
}

void main() {
  FirebaseMessaging.onBackgroundMessage(_firebaseBackgroundHandler);
  // ...
}

Registro manual de token

Si no usas Firebase Messaging o quieres registrar tokens de otro proveedor:

await SouthGamesSDK.push.registerDeviceToken(
  externalId: 'user_123',
  token: 'fcm_or_apns_token',
);

Proveedores compatibles

El SDK es agnóstico al proveedor de push. Puedes usar cualquiera:

  • Firebase Cloud Messaging (FCM)
  • Apple Push Notification service (APNs)
  • OneSignal
  • Cualquier otro que te dé un device token

Logout

Al hacer logout, el SDK desregistra el token automáticamente:

await SouthGamesSDK.logout();
// El token se elimina del servidor y se borra localmente