Hi,
I’m new on Futter and I have a problem with iOS devices and PUSH notifications. I have this code and it works perfectly on Android devices:
// 🔔 Notificació PUSH al propietari
final solicitanteDoc =
await _firestore.collection("usuarios").doc(_userId).get();
final solicitanteEmail = solicitanteDoc["email"] ?? "";
final fechaTimestamp = datos["fecha"] as Timestamp;
final formattedFecha = DateFormat(
"EEEE d 'de' MMMM',' y",
'es_ES',
).format(fechaTimestamp.toDate());
final url = Uri.parse(
"https://europe-west1xxx.cloudfunctions.net/sendPushNotificationNuevaSolicitud",
);
await http.post(
url,
headers: {"Content-Type": "application/json"},
body: jsonEncode({
"propietarioId": propietarioId,
"tipoGuardia": datos["tipoGuardia"],
"fecha": {
"_seconds": fechaTimestamp.seconds,
"_nanoseconds": fechaTimestamp.nanoseconds,
},
"solicitanteEmail": solicitanteEmail,
}),
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Solicitud enviada correctamente.")),
);
} catch (e) {
print("❌ Error al crear la solicitud: $e");
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text("Error al enviar la solicitud.")));
}
}
And this is the code at functions/index.ts:
export const sendPushNotificationNuevaSolicitud = functions.https.onRequest(
{region: "europe-west1"},
async (req, res) => {
try {
const {
propietarioId,
tipoGuardia,
fecha,
solicitanteEmail,
} = req.body;
if (!propietarioId || !tipoGuardia || !fecha || !solicitanteEmail) {
res.status(400).send("Faltan datos para enviar la notificación.");
return;
}
// 🔹 Format segur per a la data
let fechaFormateada = "fecha desconocida";
if (fecha._seconds) {
const date = new Date(fecha._seconds * 1000);
const fechaLocal = new Date(date.getTime() + 2 * 60 * 60 * 1000); // +2
fechaFormateada = fechaLocal.toLocaleDateString("es-ES", {
weekday: "long",
day: "numeric",
month: "long",
year: "numeric",
});
}
const usuario = await admin
.firestore()
.collection("usuarios")
.doc(propietarioId)
.get();
const token = usuario.data()?.fcmToken;
if (!token) {
res.status(200).send("El usuario no tiene token FCM.");
return;
}
const body =
`${solicitanteEmail} quiere hacer tu guardia de ` +
`${tipoGuardia} del ${fechaFormateada}`;
const response = await admin.messaging().send({
token,
notification: {
title: "Nueva solicitud recibida",
body,
},
});
console.log("✅ Notificación enviada:", response);
res.status(200).send("Notificación enviada correctamente.");
} catch (error) {
console.error("❌ Error al enviar notificación de solicitud:", error);
res.status(500).send("Error al enviar notificación.");
}
}
);
I don’t understand what are happening because it works on Android devices, but iOS users doesn’t recieve PUSH notifications.
Thanks for your support!