#Region Project Attributes
#ApplicationLabel:B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#BridgeLogger:True
#MultiDex: true
#AdditionalJar: google-auth-library-oauth2-http-1.18.0.jar
#AdditionalJar: google-auth-library-credentials-1.18.0.jar
#AdditionalJar: com.google.guava:guava
#AdditionalJar: com.google.guava:listenablefuture
#AdditionalJar: failureaccess-1.0.2.jar
#AdditionalJar: google-http-client-1.43.3.jar
#AdditionalJar: google-http-client-gson-1.43.3.jar
#AdditionalJar: gson-2.10.1.jar
#AdditionalJar: opencensus-api-0.31.1.jar
#AdditionalJar: opencensus-contrib-http-util-0.31.1.jar
#AdditionalJar: grpc-context-1.27.2.jar
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
Private Const ProjectId As String = "fcmtest2-124ae" 'change
Private ServiceAccountFilePath As String
Private Token As String
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
Dim pm As B4XPagesManager
pm.Initialize(Activity)
File.Copy(File.DirAssets, "fcmtest2-124ae-firebase-adminsdk-rii0r-494c60c2d3.json", File.DirInternal, "fcmtest2-124ae-firebase-adminsdk-rii0r-494c60c2d3.json")
ServiceAccountFilePath = File.DirInternal & "/fcmtest2-124ae-firebase-adminsdk-rii0r-494c60c2d3.json"
If File.Exists(File.DirInternal, "/fcmtest2-124ae-firebase-adminsdk-rii0r-494c60c2d3.json") Then
Log("#########################File Exists")
End If
Log(ServiceAccountFilePath)
Send("general", "title", "Initial run message")
End Sub
Private Sub Send (topic As String, title As String, body As String)
Dim Token As String = GetTokenValue(ServiceAccountFilePath)
Wait For (SendMessage(topic, title, body)) Complete (Success As Boolean) 'B4A - commend if not needed
End Sub
Private Sub SendMessage(Topic As String, Title As String, Body As String) As ResumableSub
Try
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)
message.Put("android", CreateMap("priority": "high"))
Dim jg As JSONGenerator
jg.Initialize(CreateMap("message": message))
Log(jg.ToPrettyString(4))
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)
Wait For (Job) JobDone(Job As HttpJob)
If Job.Success Then
Log(Job.GetString)
End If
Job.Release
Return True
Catch
Return False
End Try
End Sub
Private Sub GetTokenValue (FilePath As String) As String
Try
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)
Catch
Log("Token Failed to be created")
Return ""
End Try
End Sub