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)