📖 Documentación - GrupoIE Asistencia

📌 Importante: Esta aplicación no reemplaza servicios oficiales de emergencia como bomberos, policía o ambulancia pública. Su uso está limitado a redes privadas o internas, configuradas por el usuario, y no garantiza la atención inmediata de terceros oficiales.


  • Creado: 7 Marzo, 2025
  • Ultima Actualizacion: 27 Agosto, 2025
  • Compatibilidad:
  • ✅ Android - ✅ iOS

Si tiene alguna pregunta que estéfuera del alcance de este archivo de ayuda, no dude en enviarnos un correo electrónico a través de la Página de soporte.


🛠 Tecnologías Utilizadas

  • Flutter (UI y lógica de la aplicación)
  • Dart (Lenguaje de programación)
  • Firebase (Crashlytics para registro de errores)
  • Geolocator (Para obtener ubicación en tiempo real)
  • Permission Handler (Para gestionar permisos)
  • MethodChannel (Para realizar llamadas y enviar SMS en Android)
  • Twilio API (Para enviar mensajes de asistencia vía SMS y WhatsApp)
  • Url Launcher (Para abrir el marcador telefónico)

📂 Estructura del Proyecto


🚀 Instalación y Configuración



Requisitos Previos



Dependencias

Asegúrate de incluir las siguientes dependencias en tu pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  geolocator: ^10.1.0
  permission_handler: ^11.0.1
  firebase_core: ^3.0.0
  firebase_crashlytics: ^4.0.0
  url_launcher: ^6.2.5
  http: ^0.13.5

📲 Configuración de Permisos en Android e iOS



🔹 Android

En el archivo android/app/src/main/AndroidManifest.xml, agrega los siguientes permisos dentro de <manifest>

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

Además, en <application>, agrega esta configuración si usas Twilio

<uses-cleartext-traffic="true"/>

Y en android/app/build.gradle, dentro de defaultConfig

minSdkVersion 21


🍏 iOS

En el archivo ios/Runner/Info.plist, agrega las siguientes claves para solicitar permisos al usuario:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Esta aplicación necesita acceder a tu ubicación para enviar alertas.</string>

También debes habilitar la opción de Permissions en el Podfile (ios/Podfile)

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        'PERMISSION_PHONE=1',
        'PERMISSION_LOCATION=1',
        'PERMISSION_SMS=1'
      ]
    end
  end
end

🎯 Funcionalidades Principales



📌 1. Solicitud de Permisos

Future _requestPermissions() async {
   Map statuses = await [
    Permission.phone,
    Permission.sms,
    Permission.locationWhenInUse,
  ].request();
}

La aplicación solicita permisos para acceder al teléfono, SMS y ubicación.


📌 2. Llamada de Asistencia

Future _makeEmergencyCall() async {
  if (Platform.isAndroid) {
    try {
      await _callChannel.invokeMethod('realizarLlamada', {'numero': _emergencyNumber});
    } catch (e) {
      _launchPhoneDialer(_emergencyNumber);
    }
  } else {
    _launchPhoneDialer(_emergencyNumber);
  }
}

Realiza una llamada de asistencia utilizando MethodChannel en Android y url_launcher en iOS.


📌 3. Envío de Mensajes de asistencia

Future _sendEmergencyMessage() async {
  Position position = await Geolocator.getCurrentPosition();
  String message = "🚨 asistencia! Mi ubicación: https://www.google.com/maps?q=${position.latitude},${position.longitude}";
                
  if (Platform.isAndroid) {
    await _sendSMSChannel(message, _smsNumber);
    await _sendSMSTwilio(message, _whatsappNumber);
  } else {
    await _sendSMSTwilio(message, _smsNumber);
  }
                
  await _sendWhatsAppTwilio(message, _whatsappNumber);
}

Obtiene la ubicación actual y envía un mensaje con la localización mediante SMS y WhatsApp.


📌 4. Interfaz de Usuario

Scaffold(
  appBar: AppBar(
    title: Image.asset("assets/images/logo.png", height: 55),
  ),
  body: Center(
    child: GestureDetector(
      onTap: isButtonDisabled ? null : () {
        _makeEmergencyCall();
        _sendEmergencyMessage();
      },
      child: Container(
        width: 120,
        height: 120,
        decoration: BoxDecoration(
          color: isButtonDisabled ? Colors.blueGrey : Colors.red,
          shape: BoxShape.circle,
        ),
        child: Center(
          child: isLoading ? CircularProgressIndicator() : Text("LLAMAR"),
        ),
      ),
    ),
  ),
)              

El botón de asistencia activa la llamada y el envío de ubicación.


🛠 Errores y Soluciones



Error Causa Solucion
PlatformException en llamadas Falta configuración en AndroidManifest.xml <uses-permission android:name="android.permission.CALL_PHONE"/>
GeolocationStatus.denied Permiso de ubicación no concedido Solicitar permiso manualmente desde Configuración
Twilio API Unauthorized Credenciales incorrectas Revisar accountSid y authToken

❓ Preguntas Frecuentes (FAQ)

La aplicación necesita estos permisos para poder hacer llamadas de asistencia y enviar mensajes con la ubicación del usuario en situaciones críticas.
Ve a Configuración → Aplicaciones → Selecciona la app → Permisos y activa los necesarios.
Sí, pero solo para llamadas y SMS. El envío de mensajes por WhatsApp y el uso de Twilio requieren conexión a Internet.
Funciona en la mayoría de dispositivos con Android 5.0+ y iOS 11+. Sin embargo, en algunos modelos específicos, pueden presentarse restricciones de permisos.
Actualmente, los números están predefinidos en el código, pero se puede modificar para permitir que el usuario ingrese uno personalizado.

📜 Fuentes y Créditos

Desarrollado por Phixi Labs 🚀


📝 Registro de Cambios (Changelog)

v1.1.000 (27-08-2025)

🔹 Actualización de Call y SMS MethodChannel; funcionaba incorrectamente (Solo Android). 
🔹 Actualización de diseño a estilo oscuro, cambio de íconos de apps y logos. 
🔹 Textos de la aplicación actualizados para cumplir con las peticiones de las tiendas. 
🔹 Corrección de bug al no abrir el Dial (Solo iOS). 
🔹 Actualización de la información que obtienen Firebase Crashlytics y Firebase Analytics para recopilación correcta sin errores. 

v1.0.000 (BETA) (23-03-2025)

🔹 Implementación de llamada de asistencia con MethodChannel. 
🔹 Envío de ubicación a través de SMS y WhatsApp con Twilio API. 
🔹 Animación de botón de asistencia. 
🔹 Manejo de permisos en Android e iOS. 
🔹 Integración con Firebase Crashlytics y Firebase Analytics para manejo de errores y recopiación de datos.