Skip to content
This repository was archived by the owner on May 6, 2024. It is now read-only.

Commit d2b96e3

Browse files
committed
Sync user with device token on app launch
1 parent aad1287 commit d2b96e3

File tree

6 files changed

+63
-4
lines changed

6 files changed

+63
-4
lines changed

apk/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@
4747
</intent-filter>
4848
</service>
4949

50+
<meta-data android:name="com.google.firebase.messaging.default_notification_icon"
51+
android:resource="@mipmap/ic_launcher" />
52+
<meta-data
53+
android:name="com.google.firebase.messaging.default_notification_channel_id"
54+
android:value="MHacks Group" />
5055
</application>
5156

5257
</manifest>

base/src/main/java/com/mhacks/app/data/network/fcm/FCMMessageHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.core.app.NotificationCompat
77
import androidx.core.app.NotificationManagerCompat
88
import com.google.firebase.messaging.FirebaseMessagingService
99
import com.google.firebase.messaging.RemoteMessage
10+
import android.R
1011
import timber.log.Timber
1112

1213
/**
@@ -24,6 +25,7 @@ class FCMMessageHandler : FirebaseMessagingService() {
2425

2526
private fun createNotification(notification: RemoteMessage.Notification) {
2627
val builder = NotificationCompat.Builder(baseContext, mhacksGroup)
28+
.setSmallIcon(R.mipmap.sym_def_app_icon)
2729
.setDefaults(Notification.DEFAULT_ALL)
2830
.setContentTitle(notification.title)
2931
.setContentText(notification.body)

base/src/main/java/com/mhacks/app/data/network/fcm/RegistrationIntentService.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class RegistrationIntentService : IntentService(TAG) {
3737
.instanceId.addOnSuccessListener {
3838
if (it != null) {
3939
Timber.d("Register to service")
40+
sharedPreferences
41+
.edit()
42+
.putString(PUSH_TOKEN, it.token)
43+
.apply()
4044
sendRegistrationToServer(it.token)
4145
} else {
4246
Timber.d("Save to Shared Prefs that our value is false")
@@ -52,7 +56,7 @@ class RegistrationIntentService : IntentService(TAG) {
5256

5357
private fun sendRegistrationToServer(token: String) {
5458
Timber.e(token)
55-
mhacksService.postFireBaseToken(token)
59+
mhacksService.postFireBaseToken(token, "")
5660
.subscribeOn(Schedulers.io())
5761
.observeOn(AndroidSchedulers.mainThread())
5862
.subscribe(
@@ -63,6 +67,8 @@ class RegistrationIntentService : IntentService(TAG) {
6367

6468
companion object {
6569
private const val TAG = "RegIntentService"
66-
private const val SENT_TOKEN_TO_SERVER = "sentTokenToServer"
70+
const val SENT_TOKEN_TO_SERVER = "sentTokenToServer"
71+
const val PUSH_TOKEN = "pushToken"
72+
const val AUTH_TOKEN= "authToken"
6773
}
6874
}

base/src/main/java/com/mhacks/app/data/network/services/FireBaseService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ interface FireBaseService {
1212

1313
@FormUrlEncoded
1414
@POST("device")
15-
fun postFireBaseToken(@Field("push_id") pushId: String): Single<FcmDevice>
15+
fun postFireBaseToken(@Field("push_id") pushId: String, @Header("Authorization") authToken: String): Single<FcmDevice>
1616

1717
}

ui/src/main/java/com/mhacks/app/MHacksApplication.kt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,43 @@ import android.app.Notification
44
import android.app.NotificationChannel
55
import android.app.NotificationManager
66
import android.content.Context
7+
import android.content.SharedPreferences
78
import android.graphics.Color
89
import android.os.Build
10+
import android.preference.PreferenceManager
911
import com.facebook.stetho.Stetho
1012
import com.jakewharton.threetenabp.AndroidThreeTen
13+
import com.mhacks.app.data.network.fcm.RegistrationIntentService
14+
import com.mhacks.app.data.network.services.FireBaseService
1115
import com.mhacks.app.di.component.*
1216
import com.mhacks.app.di.module.AuthModule
1317
import com.mhacks.app.di.module.RetrofitModule
1418
import com.mhacks.app.di.module.RoomModule
1519
import dagger.android.AndroidInjector
1620
import dagger.android.support.DaggerApplication
21+
import io.reactivex.android.schedulers.AndroidSchedulers
22+
import io.reactivex.schedulers.Schedulers
23+
import retrofit2.Retrofit
24+
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
25+
import retrofit2.converter.moshi.MoshiConverterFactory
1726
import timber.log.Timber
1827

1928
class MHacksApplication : DaggerApplication() {
2029

2130
private lateinit var appComponent: AppComponent
2231

32+
private val retrofit = Retrofit.Builder()
33+
.baseUrl(BuildConfig.API_URL)
34+
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
35+
.addConverterFactory(MoshiConverterFactory.create())
36+
.build()
37+
38+
private val mhacksService = retrofit.create(FireBaseService::class.java)
39+
40+
private val sharedPreferences: SharedPreferences by lazy {
41+
PreferenceManager.getDefaultSharedPreferences(this)
42+
}
43+
2344
override fun onCreate() {
2445
super.onCreate()
2546
AndroidThreeTen.init(this)
@@ -41,6 +62,18 @@ class MHacksApplication : DaggerApplication() {
4162

4263
notificationManager.createNotificationChannel(notificationChannel)
4364
}
65+
66+
val pushToken = sharedPreferences.getString(RegistrationIntentService.PUSH_TOKEN, "")
67+
if (pushToken.length > 0) {
68+
val authToken = sharedPreferences.getString(RegistrationIntentService.AUTH_TOKEN, "")
69+
mhacksService.postFireBaseToken(pushToken, "Bearer ${authToken}")
70+
.subscribeOn(Schedulers.io())
71+
.observeOn(AndroidSchedulers.mainThread())
72+
.subscribe(
73+
{ sharedPreferences.edit().putBoolean(RegistrationIntentService.SENT_TOKEN_TO_SERVER, true).apply() },
74+
{ Timber.e(it) }
75+
)
76+
}
4477
}
4578

4679
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {

ui/src/main/java/com/mhacks/app/data/repository/UserRepository.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.mhacks.app.data.repository
22

3+
import android.content.Context
4+
import android.content.SharedPreferences
5+
import android.preference.PreferenceManager
36
import com.mhacks.app.data.models.Login
47
import com.mhacks.app.data.models.User
8+
import com.mhacks.app.data.network.fcm.RegistrationIntentService
59
import com.mhacks.app.data.room.dao.LoginDao
610
import com.mhacks.app.data.room.dao.UserDao
711
import com.mhacks.app.data.service.UserService
@@ -11,7 +15,12 @@ import javax.inject.Inject
1115
class UserRepository @Inject constructor(
1216
private val userService: UserService,
1317
private val loginDao: LoginDao,
14-
private val userDao: UserDao) {
18+
private val userDao: UserDao,
19+
private val appContext: Context) {
20+
21+
private val sharedPreferences: SharedPreferences by lazy {
22+
PreferenceManager.getDefaultSharedPreferences(appContext)
23+
}
1524

1625
fun getLoginCache() = loginDao.getLogin()
1726

@@ -34,6 +43,10 @@ class UserRepository @Inject constructor(
3443
fun updateLoginCache(login: Login) =
3544
Single.fromCallable {
3645
loginDao.insertLogin(login)
46+
sharedPreferences
47+
.edit()
48+
.putString(RegistrationIntentService.AUTH_TOKEN, login.token)
49+
.apply()
3750
return@fromCallable login
3851
}!!
3952

0 commit comments

Comments
 (0)