Skip to content
This repository was archived by the owner on Dec 16, 2023. It is now read-only.

Commit 1301bc2

Browse files
committed
Set FCM token to user's profile
1 parent 485e8de commit 1301bc2

7 files changed

Lines changed: 89 additions & 1 deletion

File tree

app/src/main/java/com/marknkamau/justjava/JustJavaApp.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.fabric.sdk.android.Fabric
1515
import com.crashlytics.android.Crashlytics
1616
import com.marknjunge.core.data.firebase.ClientDatabaseImpl
1717
import com.marknjunge.core.data.firebase.ClientDatabaseService
18+
import com.marknjunge.core.data.firebase.WriteListener
1819
import com.marknjunge.core.mpesa.MpesaInteractor
1920
import com.marknjunge.core.mpesa.MpesaInteractorImpl
2021
import com.squareup.leakcanary.LeakCanary
@@ -56,6 +57,21 @@ class JustJavaApp : Application() {
5657
notificationHelper = NotificationHelper(this)
5758

5859
broadcastManager = androidx.localbroadcastmanager.content.LocalBroadcastManager.getInstance(this)
60+
61+
if (authService.isSignedIn()) {
62+
val user = authService.getCurrentUser()
63+
64+
databaseService.updateUserFcmToken(user.userId, object : WriteListener {
65+
override fun onError(reason: String) {
66+
Timber.e(reason)
67+
}
68+
69+
override fun onSuccess() {
70+
Timber.i("FCM token saved")
71+
}
72+
73+
})
74+
}
5975
}
6076

6177
}

app/src/main/java/com/marknkamau/justjava/data/network/MyFirebaseMessagingService.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.marknkamau.justjava.data.network
33
import android.content.Intent
44
import com.google.firebase.messaging.FirebaseMessagingService
55
import com.google.firebase.messaging.RemoteMessage
6+
import com.marknjunge.core.data.firebase.WriteListener
67
import com.marknkamau.justjava.JustJavaApp
78
import timber.log.Timber
89

@@ -15,6 +16,8 @@ import timber.log.Timber
1516
class MyFirebaseMessagingService : FirebaseMessagingService() {
1617
private val notificationHelper by lazy { (application as JustJavaApp).notificationHelper }
1718
private val broadcastManager by lazy { (application as JustJavaApp).broadcastManager }
19+
private val authService by lazy { (application as JustJavaApp).authService }
20+
private val databaseService by lazy { (application as JustJavaApp).databaseService }
1821

1922
companion object {
2023
const val MPESA_ORDER_PAID_ACTION = "mpesa"
@@ -54,4 +57,21 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
5457
}
5558
}
5659
}
60+
61+
override fun onNewToken(token: String) {
62+
if (authService.isSignedIn()){
63+
val user = authService.getCurrentUser()
64+
65+
databaseService.updateUserFcmToken(user.userId, object : WriteListener {
66+
override fun onError(reason: String) {
67+
Timber.e(reason)
68+
}
69+
70+
override fun onSuccess() {
71+
Timber.i("FCM token saved")
72+
}
73+
74+
})
75+
}
76+
}
5777
}

app/src/main/java/com/marknkamau/justjava/ui/signup/SignUpPresenter.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.marknjunge.core.data.firebase.ClientDatabaseService
55
import com.marknjunge.core.data.firebase.WriteListener
66
import com.marknkamau.justjava.data.local.PreferencesRepository
77
import com.marknjunge.core.model.UserDetails
8+
import timber.log.Timber
89

910
internal class SignUpPresenter(private val activityView: SignUpView,
1011
private val preferences: PreferencesRepository,
@@ -50,6 +51,7 @@ internal class SignUpPresenter(private val activityView: SignUpView,
5051
preferences.saveUserDetails(userDetails)
5152
activityView.displayMessage("Sign up successfully")
5253
activityView.finishActivity()
54+
setFcmToken()
5355
}
5456

5557
override fun onError(reason: String) {
@@ -66,4 +68,16 @@ internal class SignUpPresenter(private val activityView: SignUpView,
6668
}
6769
})
6870
}
71+
72+
private fun setFcmToken(){
73+
database.updateUserFcmToken(auth.getCurrentUser().userId, object : WriteListener {
74+
override fun onError(reason: String) {
75+
Timber.e(reason)
76+
}
77+
78+
override fun onSuccess() {
79+
Timber.i("FCM token saved")
80+
}
81+
})
82+
}
6983
}

core/src/main/java/com/marknjunge/core/data/firebase/ClientDatabaseImpl.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,25 @@ class ClientDatabaseImpl : ClientDatabaseService {
3737
}
3838
}
3939

40+
override fun updateUserFcmToken(userId: String, listener: WriteListener) {
41+
FirebaseInstanceId.getInstance().instanceId
42+
.addOnSuccessListener { instanceIdResult ->
43+
val data = mapOf(
44+
DatabaseKeys.User.fcmToken to instanceIdResult.token
45+
)
46+
firestore.collection("users")
47+
.document(userId)
48+
.update(data)
49+
.addOnSuccessListener {
50+
listener.onSuccess()
51+
}
52+
.addOnFailureListener {
53+
listener.onError(it.message ?: "Unable tp update user token")
54+
}
55+
}
56+
.addOnFailureListener { listener.onError(it.message ?: "Unable to retrieve user token") }
57+
}
58+
4059
override fun getUserDefaults(id: String, listener: ClientDatabaseService.UserDetailsListener) {
4160
firestore.collection("users")
4261
.document(id)

core/src/main/java/com/marknjunge/core/data/firebase/ClientDatabaseService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ interface ClientDatabaseService {
99

1010
fun updateUserDetails(id: String, name: String, phone: String, address: String, listener: WriteListener)
1111

12+
fun updateUserFcmToken(userId: String, listener: WriteListener)
13+
1214
fun getUserDefaults(id: String, listener: UserDetailsListener)
1315

1416
fun placeNewOrder(order: Order, orderItems: List<OrderItem>, listener: WriteListener)

core/src/main/java/com/marknjunge/core/model/DatabaseKeys.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ object DatabaseKeys {
1313
const val email = "email"
1414
const val phone = "phone"
1515
const val address = "address"
16+
const val fcmToken = "fcmToken"
1617
}
1718

1819
object Order {

justjavastaff/src/main/java/com/marknkamau/justjavastaff/ui/login/LoginPresenter.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.marknkamau.justjavastaff.ui.login
22

33
import com.marknjunge.core.auth.AuthService
4+
import com.marknjunge.core.data.firebase.ClientDatabaseService
5+
import com.marknjunge.core.data.firebase.WriteListener
6+
import timber.log.Timber
47
import java.util.regex.Pattern
58

69
/**
@@ -9,7 +12,7 @@ import java.util.regex.Pattern
912
* https://github.com/MarkNjunge
1013
*/
1114

12-
class LoginPresenter(private val auth: AuthService, private val view: LoginView) {
15+
class LoginPresenter(private val auth: AuthService, private val databaseService: ClientDatabaseService,private val view: LoginView) {
1316

1417
fun signIn(email: String, password: String) {
1518
val pattern = Pattern.compile("^([a-zA-Z0-9_.-])+@justjava.com+")
@@ -23,6 +26,7 @@ class LoginPresenter(private val auth: AuthService, private val view: LoginView)
2326
auth.signIn(email, password, object : AuthService.AuthActionListener {
2427
override fun actionSuccessful(response: String) {
2528
view.onSignedIn()
29+
setFcmToken()
2630
}
2731

2832
override fun actionFailed(response: String) {
@@ -31,4 +35,16 @@ class LoginPresenter(private val auth: AuthService, private val view: LoginView)
3135
})
3236
}
3337

38+
private fun setFcmToken(){
39+
databaseService.updateUserFcmToken(auth.getCurrentUser().userId, object : WriteListener {
40+
override fun onError(reason: String) {
41+
Timber.e(reason)
42+
}
43+
44+
override fun onSuccess() {
45+
Timber.i("FCM token saved")
46+
}
47+
})
48+
}
49+
3450
}

0 commit comments

Comments
 (0)