eletrotupi / tcc/ frontend/hooks/useRegisterPushToken.tsb3ead45a73252ca3006b75f6c77a3d72e8055586
1.1 KB | 38 lines Raw
1
import * as Notifications from "expo-notifications";
2
import * as Device from "expo-device";
3
import Constants from "expo-constants";
4

5
export async function registerForPushNotifications(): Promise<string | null> {
6
  if (!Device.isDevice) return null;
7

8
  // Request permission
9
  const { status: existingStatus } = await Notifications.getPermissionsAsync();
10
  let finalStatus = existingStatus;
11

12
  if (existingStatus !== "granted") {
13
    const { status } = await Notifications.requestPermissionsAsync();
14
    finalStatus = status;
15
  }
16

17
  if (finalStatus !== "granted") {
18
    console.warn("Push notification permission denied");
19
    return null;
20
  }
21

22
  // TODO: Experiment with different vibration patterns
23
  await Notifications.setNotificationChannelAsync("default", {
24
    name: "default",
25
    importance: Notifications.AndroidImportance.MAX,
26
    vibrationPattern: [0, 250, 250, 250],
27
  });
28

29
  // Get the Expo push token
30
  const projectId = Constants.expoConfig?.extra?.eas?.projectId;
31
  const token = (
32
    await Notifications.getExpoPushTokenAsync({
33
      projectId,
34
    })
35
  ).data;
36

37
  return token;
38
}