Files
FLP_3.0/B4A/FirebaseMessaging0.bas
Jose Alberto Guerra Ugalde f512b64a2e . Commit inicial.
2024-11-07 02:41:58 -06:00

206 lines
8.4 KiB
QBasic

B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Service
Version=10.5
@EndOfDesignText@
'///////////////////////////////////////////////////////////////////////////////////////
'/// Agregar estas lineas al editor de manifiestos
'
' CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)
' CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)
' CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)
' CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)
'
'/// Agregar modulo de servicio nuevo FirebaseMessaging y copiar este modulo
'
'/// Bajar el archivo google-services.json de la consola de Firebase (https://console.firebase.google.com/)
'/// El nombre de la app en el archivo json tiene que ser el mismo que el nombre del paquete (Proyecto/Conf de Compilacion/Paquete)
'
'/// En Starter agregar esta linea
'
' Sub Service_Create
' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics")
' End Sub
'
'/// En Main en Sub Process_Globals agregar esta linea
'
' Private const API_KEY As String = "AAAAv__xxxxxxxxxxxxx-xxxxxxxxxxxxxx-xxxxxxxxxxxx"
'
'/// Esta llave se consigue igualmente en la consola de Firebase, configuracion de proyecto, Cloud Messaging,
'/// es la clave de servidor.
'///
'/// Se necesitan agregar las librerías: FirebaseAnalitics, FirebaseNotifications, JSON y OkHttpUtils
'/// ... JSON es necesario si se van a enviar mensajes, si solo se van a recibir, no es necesario.
'
'///////////////////////////////////////////////////////////////////////////////////////
Sub Process_Globals
Private fm As FirebaseMessaging
Private const API_KEY As String = "AAAAv1qt3Lk:APA91bECIR-pHn6ul53eYyoVlpPuOo85RO-0zcAgEXwE7vqw8DFSbBtCaCINiqWQAkBBZXxHtQMdpU6B-jHIqgFKVL196UgwHv0Gw6_IgmipfV_NiItjzlH9d2QNpGLp9y_JUKVjUEhP"
Dim locRequest As String
Dim pe As PhoneEvents
Dim batt As Int
Dim au As String
Dim Sprvsr As String = "Sprv-ML"
End Sub
Sub Service_Create
Subs.revisaBD
fm.Initialize("fm") 'Inicializamos FirebaseMessaging
Subs.getPhnId
pe.Initialize("pe") 'Para obtener la bateria
Subs.revisaBD
End Sub
Public Sub SubscribeToTopics
fm.SubscribeToTopic("Trckr") 'Global (you can subscribe to more topics)
fm.SubscribeToTopic("Trckr") 'Tracker Global
If Starter.logger Then Log("Subscrito a tracker global")
fm.SubscribeToTopic("Trckr-ML") 'Global (you can subscribe to more topics)
If Starter.logger Then Log("Subscrito a Trckr-ML")
fm.SubscribeToTopic(Starter.devModel) 'Propio (you can subscribe to more topics)
If Starter.logger Then Log("Subscrito a "&Starter.devModel)
If Starter.logger Then Log(fm.token)
fm.UnsubscribeFromTopic("Sprvsr") 'Unsubscribe from topic
' fm.UnsubscribeFromTopic("Trckr") 'Unsubscribe from topic
' fm.UnsubscribeFromTopic("Trckr-ML") 'Unsubscribe from topic
' fm.UnsubscribeFromTopic(Starter.devModel) 'Unsubscribe from topic
End Sub
Sub Service_Start (StartingIntent As Intent)
Subs.getPhnId
If StartingIntent.IsInitialized Then fm.HandleIntent(StartingIntent)
Sleep(0)
Service.StopAutomaticForeground 'remove if not using B4A v8+.
StartServiceAt(Me, DateTime.Now + 15 * DateTime.TicksPerMinute, True) 'Iniciamos servicio cada XX minutos
End Sub
Sub fm_MessageArrived (Message As RemoteMessage)
If Starter.logger Then Log("Message arrived")
If Starter.logger Then Log($"Message from: ${Message.From}"$)
If Starter.logger Then Log($"Message data: ${Message.GetData}"$)
Subs.getPhnId
Subs.getSSID
If Message.GetData.ContainsKey("t") Then
Dim tipos As List = Regex.Split(",",Message.GetData.Get("t"))
If tipos.IndexOf("pu") <> -1 Or tipos.IndexOf("au") <> -1 Then 'Si es una peticion de ubicacion
If Starter.logger Then Log("Es una peticion de ubicacion")
If Starter.logger Then Log($"UUC: ${Starter.UUC.Latitude},${Starter.UUC.Longitude}"$)
If Starter.UUC.IsInitialized And Starter.UUC.Latitude <> 0.0 Then
' mandaLocFM(Starter.UUC)
Subs.actualizaVar("solicitudFM", 1)
If Starter.logger Then LogColor($"Llamamos mandaLoc2: ${Starter.UUC.Latitude},${Starter.UUC.Longitude},${Subs.formatoFecha(Starter.UUC.Time)}"$, Colors.Magenta)
Subs.mandaLoc2(Starter.UUC, Starter.devModel)
End If
locRequest="Activa"
If Starter.logger Then Log("Llamamos StartFLP")
CallSubDelayed(Tracker, "StartFLP")
End If
If tipos.IndexOf("au") <> -1 Then 'Si es una actualizacion de ubicacion
au = 1
End If
If tipos.IndexOf("ping") <> -1 Then 'Si es un ping
' If Starter.logger Then Log("Es un ping")
' If Starter.logger Then Log("Mandamos pong")
' Dim params As Map = CreateMap("topic":Sprvsr,"title":"pong", "body":Starter.devModel&" - Recibi mensaje "&Message.GetData.Get("title"), "t":"pong")
' SendMessage(params)
End If
If tipos.IndexOf("bgps") <> -1 Then 'Si es una instruccion de borrar archivo gps
If Starter.logger Then Log("Es una instruccion de borrar archivo gps")
If Starter.logger Then Log("Borramos archivo gps")
Subs.borramosArchivoGPS
End If
If tipos.IndexOf("bgps2") <> -1 Then 'Si es una instruccion de borrar db gps
If Starter.logger Then Log("Es una instruccion de borrar archivo gps")
If Starter.logger Then Log("Borramos archivo gps")
Subs.deleteGPS_DB
End If
If tipos.IndexOf("dr") <> -1 Then 'Si es una peticion de ruta gps
' If Starter.logger Then Log("Es una peticion de Ruta GPS")
' Dim rutaGpsCmp As String = Subs.dameRuta
' Dim params As Map = CreateMap("topic":Sprvsr,"title":"ruta", "body":Starter.devModel&" - Recibi mensaje "&Message.GetData.Get("title"), "t":"ruta", "r":rutaGpsCmp, "fr": Main.fechaRuta)
' SendMessage(params)
End If
If tipos.IndexOf("pu") = -1 And tipos.IndexOf("ping") = -1 And tipos.IndexOf("dr") = -1 Then
If Starter.logger Then Log("No es ping ni solicitud de ubicacion o ruta, entonces no hacemos nada")
End If
End If
' Dim n As Notification
' n.Initialize
' n.Icon = "icon"
' n.SetInfo(Message.GetData.Get("title"), Message.GetData.Get("body"), Main)
' n.Notify(1)
End Sub
Sub Service_Destroy
End Sub
Sub SendMessage(params As Map)
' Dim topic As String= params.Get("topic")
' Dim title As String= params.Get("title")
' Dim body As String= params.Get("body")
' Dim tipo As String= params.Get("t")
' If params.ContainsKey("r") Then
' Dim rutaGpsCmp As String= params.Get("r")
' Else
' Dim rutaGpsCmp As String = ""
' End If
' Dim Job As HttpJob
' Job.Initialize("fcm", Me)
' Dim m As Map = CreateMap("to": $"/topics/${topic}"$)
' Dim data As Map = CreateMap("title":title, "body":body, "d":Starter.devModel.Trim, "t":tipo, "w":Subs.ssid, "b":batt, "r":rutaGpsCmp, "v":Application.VersionName)
' m.Put("data", data)
' Dim jg As JSONGenerator
' jg.Initialize(m)
'' Job.PostString("https://fcm.googleapis.com/fcm/send", jg.ToString)
' Job.PostString("https://fcm.googleapis.com/v1/projects/pusher-4c091/messages:send", jg.ToString)
'
'' POST https://fcm.googleapis.com/v1/projects/pusher-4c091/messages:send
'' "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
'
' Job.GetRequest.SetContentType("application/json;charset=UTF-8")
'' Job.GetRequest.SetHeader("Authorization", "key=" & API_KEY)
' Job.GetRequest.SetHeader("Authorization", "Bearer AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0")
' If Starter.logger Then Log("Mandamos mensaje: " & m)
End Sub
Sub mandaLocFM(loc As Location)
Dim coords As String = loc.Latitude & ","&loc.Longitude & ","&Subs.formatoFecha(DateTime.Now)
If Starter.logger Then LogColor("Iniciamos mandaLocFM ("&coords&")", Colors.Magenta)
Dim t As String
If locRequest="Activa" Then
If au = 1 Then
t = "au" ' es una actualizacion
Else
t = "u" ' es una peticion
End If
' Dim params As Map = CreateMap("topic":Sprvsr,"title":"ubicacionRecibida", "body":coords, "t":t)
' Log(params)
' SendMessage(params)
locRequest="Enviada"
CallSubDelayed(Tracker,"CreateLocationRequest")
End If
End Sub
Sub pe_BatteryChanged (Level As Int, Scale As Int, Plugged As Boolean, Intent As Intent)
batt=Level
End Sub
Sub PE_PhoneStateChanged (State As String, IncomingNumber As String, Intent As Intent)
If Starter.logger Then Log("Phone state: " & State)
If State = "RINGING" Then
If Starter.logger Then Log("The incoming number is: " & IncomingNumber)
Else
End If
End Sub
'Sub wifiScanned_ScanDone
' Log("//////////////////////////////wifi_conected_result")
' ToastMessageShow("Wifi_ConnectionResult",True)
' If Main.wifi.isWifiConnected Then
' ssid = Main.wifi.WifiSSID
' End If
'End Sub