Italian FireBaseMessaging

Discussion in 'Italian Forum' started by Ibbiu, Oct 4, 2018.

  1. Ibbiu

    Ibbiu Member Licensed 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.

    Code:
    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.
     
  2. Filippo

    Filippo Expert Licensed User

    Buongiorno,

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

    se invece usi invece questo, allora non hai bisogno di permessi.
    Code:
    File.WriteString(File.DirDefaultExternal, "fire.txt", intestazione & CRLF & corpo)
     
    Star-Dust likes this.
  3. udg

    udg Expert Licensed 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
     
    sirjo66 likes this.
  4. Ibbiu

    Ibbiu Member Licensed User

    Grazie per le tempestive risposte, ma in questo caso non penso sia solo un problema di permessi,
    infatti ho provato sia
    Code:
    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.......
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice