Task registered with Notifications.registerTaskAsync() task not firing on iOS. Custom Client

Summary

I have installed expo-task-manager in my custom client to be able run tasks in response to notifications received in the app. On Android when a notification is sent the background test function fires while the app is in the background, but not on iOS. I have added “UIBackgroundModes”: [“remote-notification”] to my infoPlist in my app.json. I am even able to confirm the task has actually registered when I console log it using the code below on iOS

const test = await TaskManager.getRegisteredTasksAsync()
console.log(test)

Not sure why the task is not running. I am successfully receiving the notifications from the expo notification tool but they are not triggering the background task on iOS.

Managed or bare workflow? If you have ios/ or android/ directories in your project, the answer is bare!

managed

What platform(s) does this occur on?

iOS

SDK Version (managed workflow only)

42

Environment

  Expo CLI 4.7.3 environment info:
    System:
      OS: macOS 10.15.7
      Shell: 5.7.1 - /bin/zsh
    Binaries:
      Node: 14.15.1 - /usr/local/bin/node
      Yarn: 1.22.10 - /usr/local/bin/yarn
      npm: 7.8.0 - /usr/local/bin/npm
      Watchman: 4.9.0 - /usr/local/bin/watchman
    Managers:
      CocoaPods: 1.10.1 - /usr/local/bin/pod
    SDKs:
      iOS SDK:
        Platforms: iOS 14.4, DriverKit 20.2, macOS 11.1, tvOS 14.3, watchOS 7.2
    IDEs:
      Android Studio: 4.1 AI-201.8743.12.41.6858069
      Xcode: 12.4/12D4e - /usr/bin/xcodebuild
    npmPackages:
      expo: ^42.0.0 => 42.0.0 
      react: 16.13.1 => 16.13.1 
      react-dom: 16.13.1 => 16.13.1 
      react-native: https://github.com/expo/react-native/archive/sdk-42.0.0.tar.gz => 0.63.2 
      react-native-web: ~0.13.12 => 0.13.18 
    npmGlobalPackages:
      expo-cli: 4.7.3
    Expo Workflow: managed

Reproducible demo or steps to reproduce from a blank project

add expo-task-manager to project
add expo notifications to project
add the following to your app.json

 "ios": {
            "infoPlist": {
                "UIBackgroundModes": ["remote-notification"]
            },

use code bellow to a test task. and then use the expo notification tool to send a notification to your app while it is in the background.

import * as Notifications from 'expo-notifications'
import * as TaskManager from 'expo-task-manager'

const BACKGROUND_NOTIFICATION_TASK = 'BACKGROUND-NOTIFICATION-TASK'

TaskManager.defineTask(
    BACKGROUND_NOTIFICATION_TASK,
    ({ data, error, executionInfo }) => {
        console.log('Received a notification in the background!')
        console.log(data)
        // Do something with the notification data
    }
)

Notifications.registerTaskAsync(BACKGROUND_NOTIFICATION_TASK)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.