Skip to content

isHeadless from voltra/client is unreliable #155

@adityaranjan006

Description

@adityaranjan006

Library Version

1.4.0

React Native Version

0.81.5

React Version

19.1.0

Expo Version

54.0.34

Minimal Reproduction

  1. Expo router navigation from default app/ to index.js.
  2. index.js will be the entry point o the app with the following code for initialising the voltaListeners if Headless is detected from LiveActivity.
  3. Sometimes, when multiple LiveActivities are triggered the app wasn't correctly initialised in the background. (User is on the Login Screen instead of logged In Home Screen)

Additional Information (Optional)

import * as SplashScreen from 'expo-splash-screen'
import { registerTemperatureActivityId } from './temperature'
import { registerAlarmActivityId, getAlarmActivityId } from './src/utils/alarmLiveActivityStorage'
import { handleLiveActivityAlarmDismiss, parseAlarmDismissSide } from './src/utils/handleLiveActivityAlarmDismiss'
import { headless } from './src/constants/isHeadless'
import './firebaseBackground'

console.log('[index.js] isHeadless:', headless)

if (headless) {
  addVoltraListener('activityTokenReceived', ({ activityName }) => {
    if (activityName.includes('temperature_control')) {
      registerTemperatureActivityId(activityName)
    } else if (activityName.toLowerCase().includes('alarm')) {
      registerAlarmActivityId(activityName)
    }
  })

  addVoltraListener('interaction', (event) => {
    const id = event?.identifier
    if (typeof id !== 'string') return

    if (id.includes('increment') || id.includes('decrease')) {
      const { handleInteraction } = require('./temperature')
      void handleInteraction(id)
      return
    }

    if (id.includes('dismiss') && parseAlarmDismissSide(id)) {
      const side = parseAlarmDismissSide(id)
      console.log('[headless dismiss] slot:', side, 'activity-id:', getAlarmActivityId(side), 'identifier:', id)
      void handleLiveActivityAlarmDismiss(id).catch((err) => {
        console.warn('[headless dismiss error]', err)
      })
    }
  })
}

SplashScreen.preventAutoHideAsync()
require('expo-router/entry')```

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions