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 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 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.Latitude <> 0.0 Then mandaLocFM(Starter.UUC) If Starter.logger Then LogColor($"Mandamos UUC: ${Starter.UUC.Latitude},${Starter.UUC.Longitude},${Subs.formatoFecha(Starter.UUC.Time)}"$, Colors.Magenta) 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.GetRequest.SetContentType("application/json;charset=UTF-8") Job.GetRequest.SetHeader("Authorization", "key=" & API_KEY) 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