@@ -4,23 +4,25 @@ import android.app.PendingIntent
44import android.content.Context
55import android.content.Intent
66import android.content.IntentFilter
7- import androidx.work.OneTimeWorkRequest
8- import androidx.work.WorkManager
9- import androidx.work.Worker
10- import androidx.work.WorkerParameters
7+ import androidx.work.*
118import com.google.firebase.messaging.FirebaseMessagingService
129import com.google.firebase.messaging.RemoteMessage
1310import timber.log.Timber
1411
1512
1613class MyFirebaseMessagingService : FirebaseMessagingService () {
17- private val timberInit = false
18-
1914 // [START receive_message]
2015 override fun onMessageReceived (remoteMessage : RemoteMessage ) {
2116 initTimber()
2217 Timber .d(MyFirebaseMessagingService ::onMessageReceived.name)
23- scheduleJob()
18+
19+ val messageID = remoteMessage.data[Constants .KEY_MESSAGE_ID ]
20+ if (messageID == null ) {
21+ Timber .e(" cannot get message id from notification data with key [${Constants .KEY_MESSAGE_ID } ]" )
22+ return
23+ }
24+
25+ scheduleJob(messageID)
2426 }
2527 // [END receive_message]
2628
@@ -41,15 +43,20 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
4143 }
4244 // [END on_new_token]
4345
44- private fun scheduleJob () {
46+ private fun scheduleJob (messageID : String ) {
4547 // [START dispatch_job]
48+ val inputData: Data = workDataOf(Constants .KEY_MESSAGE_ID to messageID)
4649 val work = OneTimeWorkRequest
4750 .Builder (SendSmsWorker ::class .java)
51+ .setInputData(inputData)
52+ .addTag(messageID)
4853 .build()
4954
5055 WorkManager
5156 .getInstance(this )
5257 .enqueue(work)
58+
59+ Timber .d(" work enqueued with ID [${work.id} ] for messageID [${messageID} ]" )
5360 // [END dispatch_job]
5461 }
5562 private fun sendRegistrationToServer (token : String ) {
@@ -87,9 +94,13 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
8794 return Result .failure()
8895 }
8996
90- val owner = Settings .getOwner(applicationContext) ? : return Result .failure()
91- val message = getMessage(applicationContext, owner) ? : return Result .failure()
97+ val messageID = this .inputData.getString(Constants .KEY_MESSAGE_ID )
98+ if (messageID == null ) {
99+ Timber .e(" cannot get outstanding message for work [${this .id} ]" )
100+ return Result .failure()
101+ }
92102
103+ val message = getMessage(applicationContext, messageID) ? : return Result .failure()
93104 registerReceivers(applicationContext, message.id)
94105
95106 sendMessage(
@@ -112,16 +123,16 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
112123 )
113124 }
114125
115- private fun getMessage (context : Context , owner : String ): Message ? {
116- Timber .d(" fetching message" )
117- val messages = HttpSmsApiService (Settings .getApiKeyOrDefault(context)).getOutstandingMessages(owner )
126+ private fun getMessage (context : Context , messageID : String ): Message ? {
127+ Timber .d(" fetching message with ID [ ${messageID} ] " )
128+ val message = HttpSmsApiService (Settings .getApiKeyOrDefault(context)).getOutstandingMessage(messageID )
118129
119- if (messages.isNotEmpty() ) {
120- Timber .d(" fetched message with ID [${messages.first() .id} ]" )
121- return messages.first()
130+ if (message != null ) {
131+ Timber .d(" fetched message with ID [${message .id} ]" )
132+ return message
122133 }
123134
124- Timber .e(" cannot get message from API" )
135+ Timber .e(" cannot get message from API with ID [ ${messageID} ] " )
125136 return null
126137 }
127138
0 commit comments