Italian [ Solved ] Notifiche Firebase

Xfood

Expert
Licensed User
Ciao A tutti,
sto provando l'esempio suggerito da EREL sulla gestione delle notifiche con firebase

mi funziona tutto, la mia domanda e':
se mando piu notifiche, perche mi ritrovo sul cell solo l'ultima notifica?
esiste un modo per tenere traccia di tutte le notifiche almeno fino a che non vengono lette.

utilizzando questo codice in b4j per mandare la notifica
SendMessage("general", "0 - Pubblicita Indice Massa Corporea", "Corpo del messaggio Pubblicita 0")
SendMessage("general", "1 - Indice Massa Corporea", "Corpo del messaggio 1")
SendMessage("general", "2 - Pubblicita Indice Massa Corporea", "Corpo del messaggio Pubblicita 2")

sul cell vedo solo uno dei tre messaggi, anche se lo mando altre volte...

allego anche il codice b4a di ricezione, che comunque e' quello originale del post

B4X:
Sub fm_MessageArrived (Message As RemoteMessage)
    Log("Message arrived")
    Log($"Message data: ${Message.GetData}"$)
   
   
   
    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
 

Xfood

Expert
Licensed User
trovato una piccola soluzione per le notifiche multiple, ( un po casareccia)
cioe' ho messo una variabile publica sul main
B4X:
Sub Process_Globals

      Public Notifiche As Int
End Sub

' in main
If FirstTime Then
   Notifiche=1
End If

' nel servizio '
Sub fm_MessageArrived (Message As RemoteMessage)
    Dim n As Notification
    n.Initialize
    n.Sound = True
    n.Icon = "icon"
    n.SetInfo(Message.GetData.Get("title"), Message.GetData.Get("body"), Main)
    n.Notify(Main.notifiche)
    Main.Notifiche=Main.Notifiche+1

End Sub

adesso la mia domanda e' se clicco sulla notifica, mi si apre l'app, e questo e buono,
come faccio una volta che si e' aperta l'app su quale notifica ho premuto?
anche un semplice piccolo Msgbox("titolo notifica","corpo notifica")
esiste un modo per catturare questi valori?
 

Star-Dust

Expert
Licensed User
Usa SetInfo2 cosi puoi passare anche un TAG per identificare il tipo di messaggio.

Comunque io semplicemente mi memorizza il messaggio in un DB sqlite. Un campo del record indica se è stato letto. Non invierei a Main ma a un altra Activity che mi visualizza il messaggio e imposta a True il campo Letto.
 
Last edited:

Xfood

Expert
Licensed User
Usa SetInfo2 cosi puoi passare anche un TAG per identificare il tipo di messaggio.

Comunque io semplicemente mi memorizza il messaggio in un DB sqlite. Un campo del record indica se è stato letto. Non invierei a Main ma a un altra Activity che mi visualizza il messaggio e imposta a True il campo Letto.
Grazie, l'idea e ottima, ma se invio per esempio 3 messaggi, e l'utente nella barra delle notifiche clicca per esempio sul secondo, automaticamente si apre la mia app, ma come faccio a lanciare una activity in base al messaggio letto? Quando parte il'app , come faccio a scatenare un evento ?
Anche un semplice
Msgbox("titolo notifica","corpo notifica") ???
 

Star-Dust

Expert
Licensed User
Come ho scritto usa SetInfo2.
B4X:
Dim Tag as String = Message.GetData.Get("title") & "|" & Message.GetData.Get("body")
n.SetInfo2(Message.GetData.Get("title"), Message.GetData.Get("body"),Tag, MessageReaderActivity)

Nell'Activity per i messaggi
B4X:
Sub Process_Globals
    Public Tag As String = ""
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
   if Tag<>"" then
      Dim Ms() as string = Regex.Split("|",Tag")
      If Ms.Length>1 then
            Msgbox(Ms(0),Ms(1))
      End If
   End IF
End Sub

Sub Activity_Resume
  Dim in As Intent
  in = Activity.GetStartingIntent
  If in.HasExtra("Notification_Tag") Then
    Tag=in.GetExtra("Notification_Tag") 'Will log the tag
  Else
     Tag=""
  End If
End Sub

ATTENZIONE: Non l'ho provato, l'ho scritto di getto, quindi prendine il concetto base, ci potrebbe essere qualche errore
 
Last edited:

Xfood

Expert
Licensed User
Come ho scritto usa SetInfo2.
B4X:
Dim Tag as String = Message.GetData.Get("title") & "|" & Message.GetData.Get("body")
n.SetInfo2(Message.GetData.Get("title"), Message.GetData.Get("body"),Tag, Main)

Nell'Activity per i messaggi
B4X:
Sub Process_Globals
    Public Tag As String = ""
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
   if Tag<>"" then
      Dim Ms() as string = Regex.Spli("|",Tag")
      If Ms.Length>1 then
            Msgbox(Ms(0),Ms(1)) 
      End If
   End IF
End Sub

Sub Activity_Resume
  Dim in As Intent
  in = Activity.GetStartingIntent
  If in.HasExtra("Notification_Tag") Then
    Tag=in.GetExtra("Notification_Tag") 'Will log the tag
  Else
     Tag=""
  End If
End Sub

ATTENZIONE: Non l'ho provato, l'ho scritto di getto, quindi prendine il concetto base, ci potrebbero essere qualche errore
Grazie, e proprio quello che mi serviva
 

Xfood

Expert
Licensed User
Grazie all'aiuto di @Star-Dust ho risolto il mio quesito,
metto qui le correzzioni

' nel main
B4X:
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
    Public Tag As String = ""
    Public Numero As Int =1
End Sub


Sub Activity_Create(FirstTime As Boolean)
  
    If Tag<>"" Then
        Dim ms() As String = Regex.Split("\|",Tag)
        If ms.Length>1 Then
            Msgbox(ms(0),ms(1))
        End If
    End If
    Activity.LoadLayout("Layout")
End Sub

Sub Activity_Resume
    Dim in As Intent
    in = Activity.GetStartingIntent
    If in.HasExtra("Notification_Tag") Then
        Tag=in.GetExtra("Notification_Tag") 'Will log the tag
    Else
        Tag=""
    End If
End Sub
' nel servizio
B4X:
Sub Globals

    Dim n As Notification

End Sub


Sub fm_MessageArrived (Message As RemoteMessage)

    Dim n As Notification

    n.Initialize

    n.Sound = True

    n.Icon = "icon"

    

        Dim Tag as String =main.numero & " | " & Message.GetData.Get("title") & "|" & Message.GetData.Get("body")

        Main.Tag=Tag

        n.SetInfo2(main.numero & " | " & Message.GetData.Get("title"), Message.GetData.Get("body"),Tag, Main)

        Main.Notifiche=Main.Notifiche+1

End Sub
 
Top