import * as Device from "expo-device";
import * as Notifications from "expo-notifications";
import { Platform } from "react-native";
import Colors from "../constants/Colors";
import { addDevice } from "./backend";
import Constants from "expo-constants";
import * as Application from 'expo-application'
import global from "../constants/global";
Notifications.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true,
shouldPlaySound: false,
shouldSetBadge: true,
vibrationPattern: [0, 80, 100, 120], // Your short Sherlock pattern
}),
});
export async function registerForPushNotificationsAsync() {
if (!Device.isDevice) {
alert("Push notifications require a physical device");
console.log("Not a device, notifications disabled.")
return null;
}
const { status: existingStatus } = await Notifications.getPermissionsAsync();
let finalStatus = existingStatus;
if (existingStatus !== "granted") {
const { status } = await Notifications.requestPermissionsAsync();
console.log("Notification permissions granted.")
finalStatus = status;
}
if (finalStatus !== "granted") {
alert("Permission denied for push notifications");
console.warn("Notification permissions denied.")
return null;
}
const tokenData = await Notifications.getExpoPushTokenAsync({projectId:'1cc1c4fc-3bdf-4d32-9db7-0577ae648866'});
const token = tokenData.data;
global.expoToken = tokenData.data
console.log("Push Token:", token);
if(existingStatus!=="granted"){
//Adds device to backend
addDevice(token, Constants.deviceName?Constants.deviceName:"None", Application.nativeApplicationVersion?Application.nativeApplicationVersion:"NULL", Platform.OS).then((res)=>{
console.log(res)
}).catch((err)=>{
console.error(err)
})
}
if (Platform.OS === "android") {
await Notifications.setNotificationChannelAsync("default", {
name: "default",
importance: Notifications.AndroidImportance.HIGH,
vibrationPattern: [0, 80, 100, 120],
lightColor: Colors.dark.cyan,
});
}
return token;
}