Make sure Firebase crash does not crash the app or coroutine

This commit is contained in:
Philipp Heckel 2022-02-07 22:04:16 -05:00
parent e6c3a2e2bd
commit 42188d5152

View file

@ -5,21 +5,29 @@ import io.heckel.ntfy.log.Log
class FirebaseMessenger { class FirebaseMessenger {
fun subscribe(topic: String) { fun subscribe(topic: String) {
FirebaseMessaging val firebase = maybeInstance() ?: return
.getInstance() firebase
.subscribeToTopic(topic) .subscribeToTopic(topic)
.addOnCompleteListener { .addOnCompleteListener {
Log.d(TAG, "Subscribing to topic $topic complete: result=${it.result}, exception=${it.exception}, successful=${it.isSuccessful}") Log.d(TAG, "Subscribing to topic $topic complete: result=${it.result}, exception=${it.exception}, successful=${it.isSuccessful}")
} }
.addOnFailureListener { .addOnFailureListener { e ->
Log.e(TAG, "Subscribing to topic $topic failed: $it") Log.e(TAG, "Subscribing to topic $topic failed: ${e.message}", e)
} }
} }
fun unsubscribe(topic: String) { fun unsubscribe(topic: String) {
FirebaseMessaging val firebase = maybeInstance() ?: return
.getInstance() firebase.unsubscribeFromTopic(topic)
.unsubscribeFromTopic(topic) }
private fun maybeInstance(): FirebaseMessaging? {
return try {
FirebaseMessaging.getInstance()
} catch (e: Exception) {
Log.e(TAG, "Firebase instance unavailable: ${e.message}", e)
null
}
} }
companion object { companion object {