diff --git a/App.js b/App.js index b64a975..2529c35 100644 --- a/App.js +++ b/App.js @@ -1,11 +1,63 @@ import { StatusBar } from 'expo-status-bar'; -import { useState, useRef } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { StyleSheet, Text, View, Button } from 'react-native'; +import * as Device from 'expo-device'; +import * as Notifications from 'expo-notifications'; import Modal from "react-native-modal"; + + export default function App() { const [modalVisible, setModalVisible] = useState(false); + const [expoPushToken, setExpoPushToken] = useState(); + const [notification, setNotification] = useState(); + useEffect(()=>{ + registerForPushNotificationsAsync().catch((error) => { + console.log('There has been a problem with your fetch operation: ' + error.message); + // ADD THIS THROW error + throw error; + }); + Notifications.setNotificationHandler({ + handleNotification: async () => ({ + shouldShowAlert: true, + shouldPlaySound: false, + shouldSetBadge: false, + }), + }); + Notifications.addNotificationReceivedListener(() => setNotification(notification)); + Notifications.addNotificationResponseReceivedListener((response) => console.log(response)); + },[]); + + registerForPushNotificationsAsync = async () => { + 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') { + alert('Failed to get push token for push notification!'); + return; + } else { + console.log(finalStatus) + } + const token = (await Notifications.getExpoPushTokenAsync()).data; + console.log(token); + setExpoPushToken(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', + // });} + }; return ( <> {/* SWIPEABLE MODAL START */} @@ -38,6 +90,7 @@ export default function App() {