|
|
|
@ -17,37 +17,32 @@ import kotlin.coroutines.resumeWithException
@@ -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) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|