Expo

Get Started
Guides

Push Notifications Setup

To get the client-side ready for push notifications, the 2 main things we need are:
  • The user's permission to send them push notifications
  • The user's ExpoPushToken- if push notifications are mail, then the ExpoPushToken is the user's address.
We can easily grab both of these using the expo-notifications library. For permissions, use requestPermissionsAsync, and for the ExpoPushToken, use getExpoPushTokenAsync.
Note: in the managed workflow, you don't need to pass any additional options to getExpoPushTokenAsync. In the bare workflow, you'll need to pass your experienceId. Make sure you read the documentation for more information.
The following method takes care of all this for you, so feel free to copy/paste it.
registerForPushNotificationsAsync = async () => {
  if (Constants.isDevice) {
    const { status: existingStatus } = await Notifications.getPermissionsAsync();
    let finalStatus = existingStatus;
    if (existingStatus !== 'granted') {
      const { status } = await Notifications.requestPermissionsAsync();
      finalStatus = status;
    }
    if (finalStatus !== 'granted') {
      alert('Failed to get push token for push notification!');
      return;
    }
    const token = (await Notifications.getExpoPushTokenAsync()).data;
    console.log(token);
    this.setState({ expoPushToken: token });
  } else {
    alert('Must use physical device for Push Notifications');
  }

  if (Platform.OS === 'android') {
    Notifications.setNotificationChannelAsync('default', {
      name: 'default',
      importance: Notifications.AndroidImportance.MAX,
      vibrationPattern: [0, 250, 250, 250],
      lightColor: '#FF231F7C',
    });
  }
  };
registerForPushNotificationsAsync = async () => {
  if (Constants.isDevice) {
    const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
    let finalStatus = existingStatus;
    if (existingStatus !== 'granted') {
      const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
      finalStatus = status;
    }
    if (finalStatus !== 'granted') {
      alert('Failed to get push token for push notification!');
      return;
    }
    const token = await Notifications.getExpoPushTokenAsync();
    console.log(token);
    this.setState({ expoPushToken: token });
  } else {
    alert('Must use physical device for Push Notifications');
  }

  if (Platform.OS === 'android') {
    Notifications.createChannelAndroidAsync('default', {
      name: 'default',
      sound: true,
      priority: 'max',
      vibrate: [0, 250, 250, 250],
    });
  }
  };

Credentials

If you're using the bare workflow, or building a standalone app with expo build:ios or expo build:android, you'll also need to configure the necessary push credentials.
For Android, both managed and bare workflow users need to follow our FCM setup guide, it should only take about 5 minutes.
For iOS, the Classic expo build service takes care of push notification credentials automatically when you run expo build:ios. But when using EAS Build or the bare workflow, you'll need to use the expo credentials:manager command to upload your push notification credentials to Expo's servers. You can find more detailed instructions here.
Note: A paid Apple Developer Account is required to generate credentials.