Sub Send
Wait For (SendMessage("ios_test", "title", "body", "sound")) Complete (Success As Boolean)
Log("Success = " & Success) ' this returns True
end Sub
Public Sub SendMessage(Topic As String, Title As String, Body As String, sound As String) As ResumableSub
Try
Dim Token As String = GetTokenValue(ServiceAccountFilePath)
Dim Job As HttpJob
Job.Initialize("", Me)
Dim data As Map = CreateMap("title": Title, "body": Body)
Dim message As Map = CreateMap("topic": Topic, "data": data)
If Topic.StartsWith("ios_") Then
'B4i
Dim Badge As Int = 0
Dim iosalert As Map = CreateMap("title": Title, "body": Body)
message.Put("notification", iosalert)
message.Put("apns", CreateMap("headers": _
CreateMap("apns-priority": "10"), _
"payload": CreateMap("aps": CreateMap("sound": sound, "badge": Badge))))
Else
'B4A
message.Put("android", CreateMap("priority": "high"))
End If
Dim jg As JSONGenerator
jg.Initialize(CreateMap("message": message))
Job.PostString($"https://fcm.googleapis.com/v1/projects/${ProjectID}/messages:send"$, jg.ToString)
Job.GetRequest.SetContentType("application/json;charset=UTF-8")
Job.GetRequest.SetHeader("Authorization", "Bearer " & Token)
Job.GetRequest.Timeout = 10000
Wait For (Job) JobDone(Job As HttpJob)
If Job.Success Then
Log(Job.GetString) ' returns the successful message like { "name": "projects/... }
Job.Release
Else
Log(Job.ErrorMessage)
Log("Failed to process Firebase. Topic = " & Topic)
Job.Release
Sleep(10000)
SendMessage(Topic,Title,Body,sound)
End If
Job.Release
Return True
Catch
Job.Release
Log(LastException.Message)
Return False
End Try
End Sub
Private Sub GetTokenValue (FilePath As String) As String
Dim GoogleCredentials As JavaObject
GoogleCredentials.InitializeStatic("com.google.auth.oauth2.GoogleCredentials")
Dim Credentials As JavaObject = GoogleCredentials.RunMethodJO("fromStream", Array(File.OpenInput(FilePath, ""))) _
.RunMethod("createScoped", Array(Array As String("https://www.googleapis.com/auth/firebase.messaging")))
Credentials.RunMethod("refreshIfExpired", Null)
Return Credentials.RunMethodJO("getAccessToken", Null).RunMethod("getTokenValue", Null)
End Sub