43 lines
1.5 KiB
Kotlin
43 lines
1.5 KiB
Kotlin
package expo.modules.notifications.tokens
|
|
|
|
import expo.modules.kotlin.Promise
|
|
import expo.modules.kotlin.modules.Module
|
|
import expo.modules.kotlin.modules.ModuleDefinition
|
|
import expo.modules.notifications.service.delegates.FirebaseMessagingDelegate.Companion.addTokenListener
|
|
import expo.modules.notifications.tokens.interfaces.FirebaseTokenListener
|
|
|
|
private const val NEW_TOKEN_EVENT_NAME = "onDevicePushToken"
|
|
private const val NEW_TOKEN_EVENT_TOKEN_KEY = "devicePushToken"
|
|
private const val REGISTRATION_FAIL_CODE = "E_REGISTRATION_FAILED"
|
|
private const val UNREGISTER_FOR_NOTIFICATIONS_FAIL_CODE = "E_UNREGISTER_FOR_NOTIFICATIONS_FAILED"
|
|
|
|
/**
|
|
* Stub PushTokenModule (Firebase-free) for F-Droid builds.
|
|
* Push tokens are unavailable without Firebase — getDevicePushTokenAsync rejects with an error.
|
|
*/
|
|
class PushTokenModule : Module(), FirebaseTokenListener {
|
|
override fun onNewToken(token: String) {
|
|
runCatching {
|
|
sendEvent(NEW_TOKEN_EVENT_NAME, mapOf(NEW_TOKEN_EVENT_TOKEN_KEY to token))
|
|
}
|
|
}
|
|
|
|
override fun definition() = ModuleDefinition {
|
|
Name("ExpoPushTokenManager")
|
|
|
|
Events("onDevicePushToken")
|
|
|
|
OnCreate {
|
|
addTokenListener(this@PushTokenModule)
|
|
}
|
|
|
|
AsyncFunction("getDevicePushTokenAsync") { promise: Promise ->
|
|
promise.reject(REGISTRATION_FAIL_CODE, "Push notifications via FCM are not available in this build (F-Droid). Use local notifications only.", null)
|
|
}
|
|
|
|
AsyncFunction("unregisterForNotificationsAsync") { promise: Promise ->
|
|
promise.resolve(null)
|
|
}
|
|
}
|
|
}
|