0

I recently purchased a Sunmi V2 device for a client, and I am trying to print something when I receive a notification from expo-notification using react-native. I have successfully implemented this in another application, but I am having difficulty getting it to work on the Sunmi V2 device.

Here is the approach I took: On my StackNavigator.js component, I have...

const { user } = useAuth();

const { registerForPushNotificationsAsync, handleNotifications, handleNotificationsResponse } = useNotifications();

useEffect(() => {
    registerForPushNotificationsAsync();

    Notifications.setNotificationHandler({
        handleNotification: async () => ({
            shouldShowAlert: true,
            shouldPlaySound: true,
            shouldSetBadge: false,
        }),
    });

    const responseListener =
        Notifications.addNotificationResponseReceivedListener(
            handleNotificationsResponse
        );

    return () => {
        if (responseListener)
            Notifications.removeNotificationSubscription(responseListener)
    }

}, [user])

Here is the useNotification component:

export const useNotifications = () => {

    const { user } = useAuth();

    const 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!');
                // console.log('Failed to get push token for push notification!')
                return;
            }
            try {
                const token = (await Notifications.getExpoPushTokenAsync()).data;

                Alert.alert("TOKEN: ", token);
                
                if (user) {
                    const useRef = doc(db, "users", user.uid);

                    if (token !== undefined) {
                        updateDoc(useRef, {
                            pushTokenExpo: token
                        });
                    }
                }
            } catch (error) {
                Alert.alert(error)
            }

        } else {
            if (user) {
                alert('Must use physical device for Push Notifications', user.uid)
            }
            alert('Must use physical device for Push Notifications');
            console.log('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',
            });
        }
    };

    const handleNotifications = (notification: Notifications.Notification) => {
        console.log('NEW NOTIFICACTION')
    };

    const handleNotificationsResponse = (
        response: Notifications.NotificationResponse
    ) => {
        console.log(response.notification.request.content.data)
        // HERE DO WHAT YOU WHAT AFTER CLICK ON NOTIF
    }

    return { registerForPushNotificationsAsync, handleNotifications, handleNotificationsResponse }
}

When I run this code on my device, it either crashes the app or does not update the Firebase collection 'user'. How can I fix this issue?

Shkunn
  • 41
  • 2

0 Answers0