Italian FireBaseMessaging

Ibbiu

Member
Licensed User
Longtime User
Buona sera....

Sono riuscito con successo ad usare firebasemessaging per inviare messaggi da una pagina PHP ai vari dispositivi mobili.
Ora, mi manca solo l'ultimo passo, e cioè salvare i vari messaggi in un file.
Ho cercato, provato e letto molto per trovare una soluzione ma al momento non ci sono riuscito.
Posto una parte di codice che "dovrebbe" funzionare, ma che in effetti non funziona.

B4X:
Sub fm_MessageArrived (Message As RemoteMessage)

   Log("Message arrived")
   Log($"Message data: ${Message.GetData}"$)
      
   Dim intestazione As String
   Dim corpo As String
   intestazione = Message.GetData.Get("title")
   corpo = Message.GetData.Get("body")
   File.WriteString(File.DirRootExternal, "fire.txt", intestazione & CRLF & corpo)
  
   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

Il file non viene neppure creato, invece OK per la notifica......
Dove è che sbaglio ?
Grazie.
 
D

Deleted member 103

Guest
Buona sera....
Buongiorno,

se usi questo
B4X:
File.WriteString(File.DirRootExternal, "fire.txt", intestazione & CRLF & corpo)
devi usare Runtime Permissions

se invece usi invece questo, allora non hai bisogno di permessi.
B4X:
 File.WriteString(File.DirDefaultExternal, "fire.txt", intestazione & CRLF & corpo)
 

udg

Expert
Licensed User
Longtime User
Ciao,
come suggerito da Filippo leggi bene quel thread e segui l'omologo video predisposto da Erel.
Ci sono un paio di punti da precisare:

"If the targetSdkVersion is lower than 23 then the standard permissions system will be used on all devices including Android 6+" , quindi se non devi pubblicare su Google Play Store e per ora ti va bene avere come target al max 22 allora non devi far nulla.

Per "File.DirDefaultExternal" si applicano i permessi , mentre è "GetSafeDirDefaultExternal" che permette di aggirare parzialmente il problema. Infatti leggiamo:
The explanation for this is that GetSafeDirDefaultExternal doesn't require any permission on Android 4.4+ (API 18) and requires the WRITE_EXTERNAL_STORAGE on older versions. The code above adds the permission to older devices.
Quindi settando il minimo a 18 (e di device con versioni minori di 4.4 sembrerebbero essercene pochi in giro) e max a 26 non sono richiesti permessi, mentre abbassando il limite ad includere device più vecchi è necessario aggiungere al Manifest quel codice riportato da Erel in modo da getsire i permessi per questo tipo di device.

Conclusione: utilizza min 18 e max 26, usa GetSafeDirDefaultExternal e pubblica pure su Google Play senza problemi.
ps: sempre che non ti sia sufficiente memorizzare il file in DirInternal, l'area "privata" della tua app..

udg
 

Ibbiu

Member
Licensed User
Longtime User
Grazie per le tempestive risposte, ma in questo caso non penso sia solo un problema di permessi,
infatti ho provato sia
B4X:
File.WriteString(File.DirDefaultExternal, "fire.txt", intestazione & CRLF & corpo)
che in DirInternal, ma il risultanto non cambia.

Ho seguito questo thread
https://www.b4x.com/android/forum/t...-messages-firebase-cloud-messaging-fcm.67716/

e grazie ai vostri post, ho capito che se l'app è aperta, il file viene creato ma all'nterno riporta Null Null come la notifica,
se invece è in background, la notifica riporta il messaggio ma il file non viene creato.

Continuo la ricerca della soluzione, e qualsiasi idea è benvenuta.......
 
Top