Handle Jorge's remarks.
This commit is contained in:
@@ -17,37 +17,32 @@ import kotlin.coroutines.resumeWithException
|
||||
import kotlin.coroutines.suspendCoroutine
|
||||
|
||||
interface FirebaseTokenDeleter {
|
||||
/**
|
||||
* Deletes the current Firebase token.
|
||||
*/
|
||||
suspend fun delete()
|
||||
}
|
||||
|
||||
/**
|
||||
* This class deletes the current Firebase token.
|
||||
*/
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultFirebaseTokenDeleter @Inject constructor(
|
||||
private val isPlayServiceAvailable: IsPlayServiceAvailable,
|
||||
) : FirebaseTokenDeleter {
|
||||
override suspend fun delete() {
|
||||
// 'app should always check the device for a compatible Google Play services APK before accessing Google Play services features'
|
||||
isPlayServiceAvailable.checkAvailableOrThrow()
|
||||
suspendCoroutine { continuation ->
|
||||
// 'app should always check the device for a compatible Google Play services APK before accessing Google Play services features'
|
||||
if (isPlayServiceAvailable.isAvailable()) {
|
||||
try {
|
||||
FirebaseMessaging.getInstance().deleteToken()
|
||||
.addOnSuccessListener {
|
||||
continuation.resume(Unit)
|
||||
}
|
||||
.addOnFailureListener { e ->
|
||||
Timber.e(e, "## deleteFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
Timber.e(e, "## deleteFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
} else {
|
||||
val e = Exception("No valid Google Play Services found. Cannot use FCM.")
|
||||
Timber.e(e)
|
||||
throw e
|
||||
try {
|
||||
FirebaseMessaging.getInstance().deleteToken()
|
||||
.addOnSuccessListener {
|
||||
continuation.resume(Unit)
|
||||
}
|
||||
.addOnFailureListener { e ->
|
||||
Timber.e(e, "## deleteFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
Timber.e(e, "## deleteFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,37 +17,32 @@ import kotlin.coroutines.resumeWithException
|
||||
import kotlin.coroutines.suspendCoroutine
|
||||
|
||||
interface FirebaseTokenGetter {
|
||||
/**
|
||||
* Read the current Firebase token from FirebaseMessaging.
|
||||
* If the token does not exist, it will be generated.
|
||||
*/
|
||||
suspend fun get(): String
|
||||
}
|
||||
|
||||
/**
|
||||
* This class read the current Firebase token.
|
||||
* If the token does not exist, it will be generated.
|
||||
*/
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultFirebaseTokenGetter @Inject constructor(
|
||||
private val isPlayServiceAvailable: IsPlayServiceAvailable,
|
||||
) : FirebaseTokenGetter {
|
||||
override suspend fun get(): String {
|
||||
// 'app should always check the device for a compatible Google Play services APK before accessing Google Play services features'
|
||||
isPlayServiceAvailable.checkAvailableOrThrow()
|
||||
return suspendCoroutine { continuation ->
|
||||
// 'app should always check the device for a compatible Google Play services APK before accessing Google Play services features'
|
||||
if (isPlayServiceAvailable.isAvailable()) {
|
||||
try {
|
||||
FirebaseMessaging.getInstance().token
|
||||
.addOnSuccessListener { token ->
|
||||
continuation.resume(token)
|
||||
}
|
||||
.addOnFailureListener { e ->
|
||||
Timber.e(e, "## retrievedFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
Timber.e(e, "## retrievedFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
} else {
|
||||
val e = Exception("No valid Google Play Services found. Cannot use FCM.")
|
||||
Timber.e(e)
|
||||
try {
|
||||
FirebaseMessaging.getInstance().token
|
||||
.addOnSuccessListener { token ->
|
||||
continuation.resume(token)
|
||||
}
|
||||
.addOnFailureListener { e ->
|
||||
Timber.e(e, "## retrievedFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
Timber.e(e, "## retrievedFirebaseToken() : failed")
|
||||
continuation.resumeWithException(e)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,12 @@ interface IsPlayServiceAvailable {
|
||||
fun isAvailable(): Boolean
|
||||
}
|
||||
|
||||
fun IsPlayServiceAvailable.checkAvailableOrThrow() {
|
||||
if (!isAvailable()) {
|
||||
throw Exception("No valid Google Play Services found. Cannot use FCM.").also(Timber::e)
|
||||
}
|
||||
}
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultIsPlayServiceAvailable @Inject constructor(
|
||||
@ApplicationContext private val context: Context,
|
||||
|
||||
Reference in New Issue
Block a user