import { useState, useEffect, useRef } from 'react'; import { Text, View, Button, Platform } from 'react-native'; import * as Device from 'expo-device'; import * as Notifications from 'expo-notifications'; import Constants from 'expo-constants'; Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldShowAlert: true, shouldPlaySound: true, shouldSetBadge: true, }), }); // async function sendPushNotification(expoPushToken: string) { // const message = { // to: expoPushToken, // sound: 'default', // title: 'Original Title', // body: 'And here is the body!', // data: { someData: 'goes here' }, // }; // await fetch('https://exp.host/--/api/v2/push/send', { // method: 'POST', // headers: { // Accept: 'application/json', // 'Accept-encoding': 'gzip, deflate', // 'Content-Type': 'application/json', // }, // body: JSON.stringify(message), // }); // } function handleRegistrationError(errorMessage: string) { alert(errorMessage); throw new Error(errorMessage); } async function registerForPushNotificationsAsync() { if (Platform.OS === 'android') { Notifications.setNotificationChannelAsync('default', { name: 'default', importance: Notifications.AndroidImportance.MAX, vibrationPattern: [0, 250, 250, 250], lightColor: '#FF231F7C', }); } if (Device.isDevice) { const { status: existingStatus } = await Notifications.getPermissionsAsync(); let finalStatus = existingStatus; if (existingStatus !== 'granted') { const { status } = await Notifications.requestPermissionsAsync(); finalStatus = status; } if (finalStatus !== 'granted') { handleRegistrationError('Permission not granted to get push token for push notification!'); return; } const projectId = "1111cd70-7f71-4435-9db3-1c131ada169d"; //Constants?.expoConfig?.extra?.eas?.projectId ?? Constants?.easConfig?.projectId; if (!projectId) { handleRegistrationError('Project ID not found'); } try { const pushTokenString = ( await Notifications.getExpoPushTokenAsync({ projectId, }) ).data; console.log(pushTokenString); return pushTokenString; } catch (e: unknown) { handleRegistrationError(`${e}`); } } else { handleRegistrationError('Must use physical device for push notifications'); } } export default function PushNotification() { const [expoPushToken, setExpoPushToken] = useState(''); const [notification, setNotification] = useState( undefined ); const notificationListener = useRef(); const responseListener = useRef(); useEffect(() => { registerForPushNotificationsAsync() .then(token => setExpoPushToken(token ?? '')) .catch((error: any) => setExpoPushToken(`${error}`)); notificationListener.current = Notifications.addNotificationReceivedListener(notification => { setNotification(notification); }); responseListener.current = Notifications.addNotificationResponseReceivedListener(response => { console.log(response); }); return () => { notificationListener.current && Notifications.removeNotificationSubscription(notificationListener.current); responseListener.current && Notifications.removeNotificationSubscription(responseListener.current); }; }, []); return ( Your Expo push token: {expoPushToken} Title: {notification && notification.request.content.title} Body: {notification && notification.request.content.body} Data: {notification && JSON.stringify(notification.request.content.data)} {/*