Italian Creare un semplice price alert senza utilizzare server

Mattiaf

Active Member
Licensed User
Ciao ragazzi, ho provato a discutere di questo topic nella sezione inglese ma oltre ad avere i messaggi moderati e dunque mi si risponde dopo ore, sembra che proprio non vogliono leggere ciò che scrivo.. Sarà perchè non sono un "Licensed user"? mah..
Mi scuso per l'incipit ma sembra davvero che hanno la bocca serrata..Eppure il mio inglese è c2... E' da due giorni che ho scoperto b4a e lo trovo fantastico perchè conosco un pò di vb.net.
Devo prelevare un numero da una API e timerizzare il tutto. Ce l'ho fatta con :
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Private Button1 As Button
    Private Label1 As Label
    Private timer1 As Timer
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout")
    timer1.Initialize("Timer1", 100)
timer1.Enabled=True
    End Sub
Sub Button1_Click
timer1.Enabled=False
End Sub
Sub timer1_tick
    Dim j As HttpJob
    j.Initialize("", Me)
    j.Download("https://api.hotbit.io/api/v1/market.last?market=KIBA/USDT")
    Wait For (j) JobDone(j As HttpJob)
    If j.Success Then
        Log(j.GetString)
        Dim parser As JSONParser
        parser.Initialize(j.GetString)
        Dim root As Map = parser.NextObject
        Dim result As String = root.Get("result")
        Label1.Text= result
    End If
    j.Release
End Sub

Preleva il numero egreggiamente. Ora ovviamente devo far si che l'app funzioni anche quando è minimizzata, non posso lasciare l'app aperta, se no non avrebbe nemmeno senso creare l'app .. :)
Sono stato indirizzato su Firebase Notification e dopo ore di implementazione, mi rendo conto che ho bisogno di un server. Dunque nisba.
Voglio che faccia tutto l'app in b4a. Ora invece mi si viene detto di usare nb6 Notifications Builder class, che invia la notifica ma ovviamente non risolve il fatto che l'app non lavori quando minimizza.
Ho pure creato una gif per spiegare cosa succedeva con firebase

ma sembra non sia servita. Non penso che sia complicato, ma ho bisogno di qualcuno che davvero capisca il semplice progetto personale che voglio fare. Devo utilizzare solo il mio device, dunque non voglio usare nessun vpn o b4j.. Sono a vostra disposizione per qualsiasi informazione voi vogliate.. Grazie
 

udg

Expert
Licensed User
Longtime User
Il tuo punto di partenza dovrebbe essere questo esempio di Erel.
Qui impari come mantenere attivo in background un tuo servizio (e come riavviarlo quanto Android lo termina).

Il timer settato a 100 (un decimo di secondo) mi sembra un po' troppo frequente. Sia perchè non è detto che la lettura dei dati dal sito avvenga per tempo sia perchè potrebbero "accusarti" di attacco DDOS al server.

il mio inglese è c2... E' da due giorni che ho scoperto b4a
Dunque, c2 - b4, il prossimo sarà a8 oppure a6? :)
 

Mattiaf

Active Member
Licensed User
Ciao udg, grazie per la tua risposta.
Quel post di Ariel mi è stato consigliato per poi essere reindirizzato su firebase notification.
Il codice:
B4X:
SetServiceAttribute(Tracker, android:foregroundServiceType, "location")

setta il gps per funzionare in foreground quindi con una notifica fissa avvisa l'utente che l'app è in funzione.. Giusto?
Ma nel mio caso, che servizio dovrei attivare visto che non mi serve il tracking della location?
Il timer settato a 100 è momentaneo in quanto messo li per verificarne la funzione. Sarà poi settato a 10 secondi..
Perdonami lo sfogo del c2 .. benchè sia vero, ho dovuto attendere ore per poi ricevere risposte a quello che già io avevo specificato in partenza.. Dunque ho escluso il mio livello di inglese, ecco perchè il c2.. scacco matto :)
 

udg

Expert
Licensed User
Longtime User
C2/B4 era solo una battuta. Qui siamo abituati a dirci (scherzosamente) di tutto ma davvero solo per ridere un attimo e poi ritornare alla dura realtà..

Nel tuo caso il servizio potrebbe essere quello che preleva i dati dal server. Una volta letti potrebbe memorizzarli in un file locale (se ti occorre la storia, ad esempio per un grafico) oppure semplicemente aggiornare la notifica con il nuovo valore.
 

LucaMs

Expert
Licensed User
Longtime User
Fai una donazione, anche minima, così sarai "licenziato" (uhm... adesso per essere licenziati bisogna anche pagare? ?), così i tuoi post non verranno moderti ed otterrai risposte più rapidamente.

"Al volo" direi che usare il timer sia sbagliato, perché magari il suo evento scatta mentre l'app sta già scaricando un dato.

La gif animata non aiuta granché, anche perché non è possibile rallentarla né, tantomeno, fermarne l'esecuzione per poter leggere; meglio pubblicare il messaggio d'errore.
 

Mattiaf

Active Member
Licensed User
@udg avevo capito fosse una battuta, benchè il mio spirito dell'umorismo non si da a vedere :)..
"servizio potrebbe essere quello che preleva i dati dal server. " Il "servizio" che preleva i dati dalle api l'ho già creato io, dunque che "servizio" dovrei usare al posto di
B4X:
SetServiceAttribute(Tracker, android:foregroundServiceType, "location")
? Sono noob io o questo serve solo a tenere la posizione in foreground?...

@LucaMs sarei molto felice di fare una donazione non appena riuscirei a risolvere questo semplice progetto. Donazione significa che qualcosa ti è stata utile, no? Sarei davvero felice di poter donare al progetto che essendo gratis, fa risparmiare centinaia di euro rispetto ad altri servizi a pagamento che per di più usano c# e non vb.net :)
""Al volo" direi che usare il timer sia sbagliato, perché magari il suo evento scatta mentre l'app sta già scaricando un dato." questo lo risolverò semplicemente stoppando il timer non appena il prezzo avrà raggiunto n stabilito. Lo riattiverò poi successivamente...
"La gif animata non aiuta granché, anche perché non è possibile rallentarla né, tantomeno, fermarne l'esecuzione per poter leggere; meglio pubblicare il messaggio d'errore." davvero? Ho provato sia su mobile sia su desktop e la gif è hostata si imgur e per quanto mi riguarda posso stopparla e rallentarla in entrambe le situazioni.. Ho convertito la gif in mp4 e hostata su youtube, ecco qua video che usa firebase per le notifiche( anche se non invia sempre le notifiche)....

ragazzi ho l'impressione che sono sbattuto da una parte all'altra senza capirci granchè o forse sono io che non mi spiego bene... dunque spiegherò i procedimenti che ho in testa:

1- Prelevo il numero ( prezzo di una crypto coin) dalle API = FATTO
2- timerizzare il parsing tramite un timer ogni 10 secondi = FATTO ( ora sta a 100, ma lo modificherò come ho detto a 10 000ms)
3- Non appena il numero(prezzo) è più alto di n una notifica o una serie di notifiche mi avviseranno che il prezzo è salito sopra n
4- Una volta che il prezzo è salito sopra n, il timer si fermerà.
5- Entrerò nell'app e riattiverò il timer e usero una textbox per inserire il prossimo n da controllare.

Ora viene la parte difficile

6- Far funzionare l'app anche quando è minimizzata.
7- Inviare la notifica (firebase non funziona spesso e volentieri e ha bisogno di b4j)

Dunque, scusate la mia ignoranza ma sto ragionando a voce alta..
-
B4X:
SetServiceAttribute(Tracker, android:foregroundServiceType, "location")
non mi serve a nulla, questo tiene il gps attivo.. a che mi serve il gps nel mio caso..
- ancora non ho trovato un topic dove l'app quando minimizzata, non viene messa in pausa...
 

LucaMs

Expert
Licensed User
Longtime User
@LucaMs sarei molto felice di fare una donazione non appena riuscirei a risolvere questo semplice progetto. Donazione significa che qualcosa ti è stata utile, no?
L'ho scritto solo per farti avere dei vantaggi, primo dei quali per evitarti il problema cui hai accennato:
ma oltre ad avere i messaggi moderati e dunque mi si risponde dopo ore
(nota che altri siti rispondono comunque dopo ore o giorni... ammesso che rispondano; qui tutto è molto rapido. Se Erel è online, otterrai una risposta in tempi brevissimi).

Inoltre, io non beccherei un cent dalle tue donazioni a Anywhere Software (purtroppo ?)
 

Mattiaf

Active Member
Licensed User
Escludi la parte GPS si quell'esempio; è il resto che devi guardare.
Permettimi, da daltonico, di usare il tuo "maremma scolorita" ...
Non ne uscirò mai vivo da questa situazione se quello è l'unico topic a riguardo..
Se escludo la parte gps di quell'esempio, quello che penso di poter prendere è:
Da main:
B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region
#BridgeLogger: true
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

End Sub

Sub Activity_Create(FirstTime As Boolean)
End Sub

Sub Activity_Resume
    Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result Then
        StartService(servizio invio notifica se il prezzo è superiore a n )
    Else
        ToastMessageShow("No permission...", True)
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Dal modulo di servizio Starter ( resta invariato)
B4X:
Sub Process_Globals
    Public rp As RuntimePermissions
End Sub

Sub Service_Create
    
End Sub

Sub Service_Start (StartingIntent As Intent)
    

End Sub

Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub

'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub Service_Destroy

End Sub

e dal modulo di servizio Tracker :
B4X:
Sub Process_Globals
    Private nid As Int = 1
       Private LastUpdateTime As Long
    Private lock As PhoneWakeState
End Sub

Sub Service_Create
    Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves
    lock.PartialLock
End Sub

Sub Service_Start (StartingIntent As Intent)
    Service.StartForeground(nid, CreateNotification("..."))
    StartServiceAt(Me, DateTime.Now + 30 * DateTime.TicksPerMinute, True)
 End Sub

Sub [B]invia notifica se prezzo è superiore a n [/B]
    If DateTime.Now > LastUpdateTime + 10 * DateTime.TicksPerSecond Then
        Dim n As Notification = CreateNotification($"prezzo superiore a n $)
        n.Notify(nid)
        LastUpdateTime = DateTime.Now
    End If
End Sub

Sub CreateNotification (Body As String) As Notification
    Dim notification As Notification
    notification.Initialize2(notification.IMPORTANCE_LOW)
    notification.Icon = "icon"
    notification.SetInfo("Prezzo superiore a n ", Body, Main)
    Return notification
End Sub

Sub Service_Destroy
    lock.ReleasePartialLock
End Sub

Questo è quello che penso di dover prendere da quel codice. Per favore potresti dirmi se sono nella giusta strada?
Grazie
 

Mattiaf

Active Member
Licensed User
Orca, sono sia daltonico anch'io che... maniaco dei "maremma+aggettivo" ?
Ho copiato la tua battuta che mi ha fatto ridere tantissimo essendo daltonico pure io ahahahah
Mi si aggiungono un paio di gradi di miopia per completare il quadro.
Tornando a noi

Il mio codice è:
main:
B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region
#BridgeLogger:True
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Private xui As XUI
    Private timer1 As Timer
End Sub
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Private Button1 As Button
    Private Label1 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout")
    timer1.Initialize("Timer1", 3000)
timer1.Enabled=True   
    End Sub
Sub Button1_Click
timer1.Enabled=False
End Sub
Sub timer1_tick
    Dim j As HttpJob
    j.Initialize("", Me)
    j.Download("https://api.hotbit.io/api/v1/market.last?market=KIBA/USDT")
    Wait For (j) JobDone(j As HttpJob)
    If j.Success Then
        Log(j.GetString)
        Dim parser As JSONParser
        parser.Initialize(j.GetString)
        Dim root As Map = parser.NextObject
        Dim result As String = root.Get("result")
        Label1.Text= result
    End If
    If result > "0.00002874" Then
    
    ' invia notifica
    End If
    j.Release
End Sub
Sub Activity_Resume
    Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result Then
        StartService("" )
    Else
        ToastMessageShow("No permission...", True)
    End If
End Sub

modulo di servizio Starter:
B4X:
#Region  Service Attributes
    #StartAtBoot: False
    #ExcludeFromLibrary: True
#End Region

Sub Process_Globals
    Public rp As RuntimePermissions
End Sub

Sub Service_Create
    
End Sub

Sub Service_Start (StartingIntent As Intent)
    

End Sub

Sub Service_TaskRemoved
    'This event will be raised when the user removes the app from the recent apps list.
End Sub

'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub Service_Destroy

End Sub

Modulo di servizio Parsingandinvio
B4X:
#Region  Service Attributes
    #StartAtBoot: True
#End Region

Sub Process_Globals
    Private nid As Int = 1
        Private LastUpdateTime As Long
    Private lock As PhoneWakeState
End Sub

Sub Service_Create
    Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves
    lock.PartialLock
End Sub

Sub Service_Start (StartingIntent As Intent)
    Service.StartForeground(nid, CreateNotification("..."))
    StartServiceAt(Me, DateTime.Now + 30 * DateTime.TicksPerMinute, True)
    PrezzoCambiato
End Sub

Sub PrezzoCambiato
    If DateTime.Now > LastUpdateTime + 10 * DateTime.TicksPerSecond Then
        Dim n As Notification = CreateNotification($"Prezzo superiore a n "$)
        n.Notify(nid)
        LastUpdateTime = DateTime.Now
    End If
End Sub

Sub CreateNotification (Body As String) As Notification
    Dim notification As Notification
    notification.Initialize2(notification.IMPORTANCE_LOW)
    notification.Icon = "icon"
    notification.SetInfo("Prezzo superiore a n ", Body, Main)
    Return notification
End Sub

Sub Service_Destroy
    lock.ReleasePartialLock
End Sub

E i relativi log:
Logger connesso a: samsung SM-G985F
--------- beginning of main
Copying updated assets files (1)
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
{"error":null,"result":"0.00002874","id":408249259}
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (CallSubDelayed - JobDone)
sending message to waiting queue (activity_permissionresult)
running waiting messages (2)
{"error":null,"result":"0.00002875","id":363420695}
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **

dunque come puoi notare, quando minimizzo l'app, va in pausa e non fa più nulla.. inoltre penso sia pieno zeppo di cose che non dovrebbero esserci.

Su editor manifest ho:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="29"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
'End of default text.
SetServiceAttribute(Parsingandinvio, android:foregroundServiceType, "location")

e questo è il video che mostra il tutto.
Mi sento davvero come un daltonico che cerca di distinguere i colori al buio.
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Non so se come membro senza licenzia tu possa, ma se puoi, allega il tuo progetto, tanto mi pare d'aver capito che, almeno la parte che hai sviluppato finora, non sia segreta.

(Se puoi allegarlo, esportalo tramite il menu File - Export As Zip).
 

Star-Dust

Expert
Licensed User
Longtime User
Ho visto velocemente il post. Vuoi fare un polling (richiesta continua) su un sito.
La frequenza che hai scelto darà 2 problemi
  1. qualunque servizio con Android 9+ dopo un pò verrebbe UCCISO (KILLED)
  2. Il server potrebbe considerarlo un attacco DDNS
Inoltre ho visto che c'è un errore nel codice, fai il polling nel corpo dell'App, invece dovrebbe stare nel servizio che è quello che rimane in vita.

Inserire l'icona di notifica è importante per evitare che il servizio sia UCCISO pochi minuti dopo l'avvio. MA se il service consuma molta energia verrà comunque UCCISO da Android. Nel caso tuo che c'è un polling molto ferrato questo è facile che accada (Tranne negli OPPO che hanno una gestione diversa)

Per evitare questo spesso si usa MQTT o Firebase oppure ti agganci di qualche servizio in background (GPS come nell'esempio di @udg) ma non è il caso tuo. Nel caso tuo, l'unico modo per far rimanere un app con servizio in background senza che sia UCCISA con Android 9+ è creare un App STANOUD. Quella non verrà mai chiusa.
Il polling andrà sempre nel servizio.

Per creare un App STANDOUT vedi qui
 
Last edited:

Mattiaf

Active Member
Licensed User
Tranquillo niente è top secret e il codice che ho postato equivale all'intero progetto.
L'attachment file dice che è troppo largo per il server (6mb..). Ho allegato su mediafire
file
 

Mattiaf

Active Member
Licensed User
Ho visto velocemente il post. Vuoi fare un polling (richiesta continua) su un sito.
La frequenza che hai scelto darà 2 problemi
  1. qualunque servizio con Android 9+ dopo un pò verrebbe UCCISO (KILLED)
  2. Il server potrebbe considerarlo un attacco DDNS
Inoltre ho visto che c'è un errore nel codice, fai il polling nel corpo dell'App, invece dovrebbe stare nel servizio che è quello che rimane in vita.

Come detto sopra i servizi consumano molta energia vengono poi UCCISI da Android dopo alcuni minuti.
Tranne che usi MQTT o Firebase oppure ti agganci di qualche servizio in background (GPS come nell'esempio di @udg) ma non è il caso tuo
Nel caso tuo, l'unico modo per far rimanere un app con servizio in background senza che sia UCCISA con Android 9+ è creare un App STANOUD. Quella non verrà mai chiusa.
Il polling andrà sempre nel servizio.

Per creare un App STANDOUT vedi qui
Intendi che la richiesta del timer ogni 10 secondi( nel codice postato è di 100 ms ma ho precisato che lo aumenterò a 10 secondi, 100ms è per non attendere 10 secondi ad ogni debug) verrebbe killato in ogni caso?
Ho già provato firebase, ma come specificato anche da Erel, se usato su b4a non invia sempre i messaggi. Infatti nella mia prima gif, non invia la notifica prima delle 5 volte che apro e richiudo l'app. Il mio obbiettivo è usare solo b4a e non appoggiarmi ad un server o a b4j. Verrebbe uccisa anche se setto da android di ignorare il risparmio energetico?
 

Mattiaf

Active Member
Licensed User
? Quale servizio avvierebbe?
Ho lasciato vuoto perchè sono perso ma teoricamente deve avviare il timer anche se il timer è già attivato una volta che l'app parte..
Mi scuso in anticipo per ogni e(O)rrore ci possa essere nel codice.. E' la mia prima volta nell'ecosistema b4x. Potete sgridarmi senza problema :)
 

Star-Dust

Expert
Licensed User
Longtime User
Intendi che la richiesta del timer ogni 10 secondi( nel codice postato è di 100 ms ma ho precisato che lo aumenterò a 10 secondi, 100ms è per non attendere 10 secondi ad ogni debug) verrebbe killato in ogni caso?
Ho già provato firebase, ma come specificato anche da Erel, se usato su b4a non invia sempre i messaggi. Infatti nella mia prima gif, non invia la notifica prima delle 5 volte che apro e richiudo l'app. Il mio obbiettivo è usare solo b4a e non appoggiarmi ad un server o a b4j. Verrebbe uccisa anche se setto da android di ignorare il risparmio energetico?
Se fai un settaggio specifico non verrebbe uccisa che io sappia. Ma questo se è un app che gira sul tuo dispositivo, se devi distribuire non puoi andare a settare tutti i dispositivi che fanno un download.
Ci sono modi per farlo da codice, ma devi cercarli nel forum
 

Mattiaf

Active Member
Licensed User
Se fai un settaggio specifico non verrebbe uccisa che io sappia. Ma questo se è un app che gira sul tuo dispositivo, se devi distribuire non puoi andare a settare tutti i dispositivi che fanno un download.
Ci sono modi per farlo da codice, ma devi cercarli nel forum
Ho già specificato che questa è un'app puramente personale e non si muoverà dal mio cellulare :) Ti ringrazio comunque per il consiglio, lo apprezzo veramente.
 
Top