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

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

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

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

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

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

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

38
  return token;
39
}