Good morning Members this is my code below when i click on the recieved firebase Message on My app the layout comes out but blank yet i wanted to pass that recieved message direct to the layout so that a person can easily read it . thanks in advance
B4X:
#Region Service Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
Private fm As FirebaseMessaging
Dim cursor1 As Cursor
End Sub
Sub Service_Create
fm.Initialize("fm")
End Sub
Public Sub SubscribeToTopics
'fm.SubscribeToTopic("general") 'you can subscribe to more topics
'fm.SubscribeToTopic("No0781703474") 'you can subscribe to more topics
cursor1 = Starter.SQL1.ExecQuery("SELECT phone AS Phone,Sex FROM Register")
If cursor1.RowCount > 0 Then
' For i = 0 To cursor1.RowCount - 1
cursor1.Position =0
Dim Phoneg As String
Phoneg = cursor1.Getstring("Phone")
Log(Phoneg)
fm.SubscribeToTopic(Phoneg) 'you can subscribe to more topics
'Next
End If
End Sub
Sub Service_Start (StartingIntent As Intent)
If StartingIntent.IsInitialized Then fm.HandleIntent(StartingIntent)
Sleep(0)
Service.StopAutomaticForeground 'remove if not using B4A v8+.
End Sub
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"), Sendsms)
'n.Build("Important Good Work sula!!!", "Content", "tag", Me).Notify(9)
n.Notify(1)
'CallSub2(Sendsms, "SetText", Message.GetData.Get("title"))
'If Message.GetData.ContainsKey("title") Then
'Dim sms As String = Message.GetData.Get("title")
'Log(sms)
'End If
End Sub
Sub Service_Destroy
End Sub
B4X:
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Type Message (Body As String, From As String)
Private const API_KEY As String = ""
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.
Private txtMessage As EditText
'Private lstUsers As ListView
Private txtLogs As EditText
Private serializator As B4XSerializator
Private chat As EditText
Dim cursor1 As Cursor
Private spnFirstName As Spinner
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("2")
If IsConnectedToInternet=True Then
InitSpinners
Else
MsgboxAsync("Error Connecting to the Server Please Check Your Internet Connection","Server Error")
Return
End If
End Sub
Private Sub client_MessageArrived (Topic As String, Payload() As Byte)
Dim receivedObject As Object = serializator.ConvertBytesToObject(Payload)
Dim m As Message = receivedObject
CallSub2(chat, "NewMessage", m)
End Sub
Private Sub CreateMessage(Body As String) As Byte()
Dim m As Message
m.Initialize
m.Body = Body
m.From = "currentName"
Return serializator.ConvertObjectToBytes(m)
End Sub
Public Sub NewMessage(msg As Message)
txtLogs.Text = $"${msg.From}: ${msg.Body}"$ & CRLF & txtLogs.Text
End Sub
Sub Activity_Resume
Dim in As Intent = Activity.GetStartingIntent
'If in.IsInitialized And in <> OldIntent Then
'OldIntent = in
Log(in.ExtrasToString)
If in.HasExtra("Notification_Tag") Then
Log("Activity started from notification. Tag: " & in.GetExtra("Notification_Tag"))
'Log("Activity started from notification. Tag: " & in.GetExtra("Notification_Tag"))
txtLogs.Text= in.GetExtra("Notification_Tag")
'CallSub2(Sendsms, "SetText", Message.GetData.Get("title"))
End If
'CallSubDelayed2(ActivityA, ReceiveMsg, SelectedMsg)
'End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
Activity.Finish
End Sub
Sub btnSend_Click
If txtMessage.Text <> "" Then
If spnFirstName.SelectedItem ="Select from the List..." Then
Msgbox("You Must Select the Student Name. ", "SMIS")
spnFirstName.RequestFocus
Return
End If
CallSub2(Starter, "SendMessage", txtMessage.Text)
txtLogs.Text = txtMessage.Text
CreateMessage(txtMessage.Text)
Else
If txtMessage.Text="" Then
Msgbox("You Must Enter Some Text To Countinue. ", "SMIS")
txtMessage.RequestFocus
Return
End If
'NewMessage
End If
If IsConnectedToInternet=True Then
cursor1 = Starter.SQL1.ExecQuery("SELECT ID FROM Sentmessages")
If cursor1.RowCount > 0 Then
For i = 0 To cursor1.RowCount - 1
cursor1.Position = i
Dim NewID As Int
NewID = cursor1.GetInt("ID")
Next
End If
NewID = NewID +1 ' add 1 to the ID number to make a new ID field
Dim l As Long
DateTime.DateFormat = "dd/MM/yyyy" ' "1961-08-29"
Dim datestring As String = DateTime.Date(JsonDateToTick(DateTime.Now))
l = DateTime.DateParse(datestring)
DateTime.DateFormat = "dd/MM/yyyy"
Log(DateTime.Date(l))
Dim now As Long
now = DateTime.Now
Log(DateTime.Now)
DateTime.DateFormat = "dd/MM/yyyy" : DateTime.TimeFormat = "hh:mm a"
Log(DateTime.Date(l)& " "& DateTime.Time(now))
Starter.SQL1.ExecNonQuery2("INSERT INTO Sentmessages VALUES(?, ?, ?)", Array As Object(DateTime.Date(l)& " "& DateTime.Time(now), txtMessage.Text, NewID ))
'txtMessage.Text=""
cursor1 =Starter.SQL1.ExecQuery2("SELECT Account,Phone,Sex,Phone2 FROM SMSlist where Names = ?", Array As String(spnFirstName.SelectedItem))
If cursor1.RowCount<>0 Then
'user registered
For i = 0 To cursor1.RowCount - 1
cursor1.Position = i
Dim act As String= cursor1.GetString("Account")
Dim phone As String= cursor1.GetString("Phone")
Dim phoneteacher As String= cursor1.GetString("Phone2")
Dim sx As String= cursor1.GetString("Sex")
Next
'Dim j As HttpJob
'j.Initialize("", Me)
'j.Download($"http://kccug.com/KabojjaApp/RecieveSMS.ashx?customerId=${act}&s=${txtMessage.Text}&d=${DateTime.Date(l)& " "& DateTime.Time(now)}&id=${NewID}&ph=${phone}&f=${sx}"$ )
Dim j As HttpJob
j.Initialize("", Me)
j.Download($"http://kccug.com/KabojjaApp/RecieveSMS.ashx?customerId=${act}&s=${txtMessage.Text}&d=${DateTime.Date(l)& " "& DateTime.Time(now)}&id=${NewID}&ph=${phone}&f=${sx}"$ )
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
End If
SendMessage(phoneteacher, "Kabojja Junior School Message From Parent", txtMessage.Text)
j.Release
txtMessage.Text=""
Dim b As Beeper
b.Initialize(300, 500) '300 milliseconds, 500 hz
b.Beep
MsgboxAsync("SMS Sent Successfully ", "SMIS")
End If
Else
MsgboxAsync("Error Connecting to the Server Please Check Your Internet Connection","Server Error")
Return
End If
End Sub
Private Sub SendMessage(Topic As String, Title As String, Body As String)
Dim Job As HttpJob
Job.Initialize("fcm", Me)
Dim m As Map = CreateMap("to": $"/topics/${Topic}"$)
Dim data As Map = CreateMap("title": Title, "body": Body)
m.Put("data", data)
Dim jg As JSONGenerator
jg.Initialize(m)
Job.PostString("https://fcm.googleapis.com/fcm/send", jg.ToString)
Job.GetRequest.SetContentType("application/json")
Job.GetRequest.SetHeader("Authorization", "key=" & API_KEY)
End Sub
Sub JobDone(job As HttpJob)
' Log(job)
If job.Success Then
Log(job.GetString)
End If
job.Release
'StopMessageLoop '<-- non ui app only
End Sub
Sub JsonDateToTick(s As String) As Long
Dim m As Matcher = Regex.Matcher("\d+", s)
If m.Find Then
Return m.Match
End If
Log("Invalid date: " & s)
Return 0
End Sub
Sub IsConnectedToInternet As Boolean
Dim r As Reflector
r.Target = r.GetContext
r.Target = r.RunMethod2("getSystemService", "connectivity", "java.lang.String")
r.Target = r.RunMethod("getActiveNetworkInfo")
If r.Target <> Null Then
Return r.RunMethod("isConnectedOrConnecting")
End If
Return False
End Sub
Sub InitSpinners
Private i As Int
Private Query1 As String
Private Curs As Cursor
'query = "CREATE TABLE SMSlist (Account Text, Names Text,Phone text,Sex, ID INTEGER )"
'We execute a query for each column and fill the Spinner
'We use SELECT DISTINCT to have each existing first name in the database only once
Query1 = "SELECT DISTINCT Account,Names FROM SMSlist"
Curs = Starter.SQL1.ExecQuery(Query1)
'Log(Curs)
'we add 'no filter' as no selection
spnFirstName.Clear
spnFirstName.Add("Select from the List...")
'we fill the Spinner with the data from the database
For i = 0 To Curs.RowCount - 1
Curs.Position = i
'spnFirstName.Add(Curs.GetString("Account"))
spnFirstName.Add(Curs.GetString("Names"))
'Dim kk As String = Curs.GetString("Names")
'Log(kk)
Next
'Curs.Close
End Sub
Sub btnEdit_Click
'ShowTable
End Sub
Last edited: