Italian [B4A] Come avviare in automatico app su Android 10

amorosik

Expert
Licensed User
Ho un'app con un service che riceve notifiche fcm (l'esempio istituzionale che si trova cercando PUSH sul sito b4X) e reagisce in funzione del messaggio ricevuto

Esempio Firebase Cloud Messaging

Provata su Android 6, sul 7, sul 9, parte correttamente all'avvio del sistema operativo senza fare nessuna operazione
Quando invio notifica fcm (usando programma B4J-sending-tool) i telefoni riconoscono il messaggio e fanno quel che devono fare
Stesso programma, installato su telefono con Android 10 sembra non partire piu'
O almeno non vedo le notifiche arrivare sul telefono
La domanda e': relativamente all'avvio in automatico dopo il boot sistema operativo, su Android 10 sapete sia cambiato qualcosa rispetto a versioni precedenti?
 

udg

Expert
Licensed User
Longtime User
Se non ricordo male, non è necessario settare un servizio (ovviamente mai Starter) come #StartAtBoot.
Questo perchè è Android stesso che chiama la tua app quando riceve un FCM
Anche in passato c'era una questione di timing, ovvero non è detto che messaggi in sospeso vengano consegnati appena si accende il device. Potrebbero passare anche minuti. Ed ogni device fa storia a sé..
Per ovviare a ciò, una possibilità era avere un service at boot che verificasse su un server se c'erano nuovi messaggi e li prendesse da lì. Poi, quando e se, arrivavano i "doppioni" FCM li si scartava senza pensieri. Basterebbe un semplice progressivo per capire se si tratta di messaggi "nuovi" o meno.
 

amorosik

Expert
Licensed User
Se non ricordo male, non è necessario settare un servizio (ovviamente mai Starter) come #StartAtBoot.
Questo perchè è Android stesso che chiama la tua app quando riceve un FCM

Perche' dici 'ovviamente mai Starter' ?
Non potrebbe essere messo pure lui in @StartAtBoot?
Oppure ha qualcosa che lo rende diverso dagli altri servizi all'interno della stessa app?
 

udg

Expert
Licensed User
Longtime User
E' la ricorrente raccomandazione di Erel: mai settare Starter come #StartAtBoot.
In effetti è un servizio particolare. E' il punto di accesso al programma ed è streattamente legato al processo che costituisce il programma vero e proprio.
 

Star-Dust

Expert
Licensed User
Longtime User
Perche' dici 'ovviamente mai Starter' ?
Non potrebbe essere messo pure lui in @StartAtBoot?
Oppure ha qualcosa che lo rende diverso dagli altri servizi all'interno della stessa app?
Lo scopo è un altro. Le app Android possono essere avviate da diversi punti, da Resume, da Create da un Intent ecc....
Starter permette di passare sempre da Starter Create da qualunque punto si sta accedendo, in modo da poter assicurarsi la dichiarazione di Variabili Globali importanti che devono sempre essere inizializzate da qualunque accesso. Si evitano promegli di oggetti non inizializzati, letture e/o procedure fondamentali non eseguite per prime.
 
Top