Files
opencode-mobile/fdroid/expo-notifications-patches/tokens/PushTokenModule.kt

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)
}
}
}