I did a test to send notifications in my application with OneSignal and I put a sound in the FlutterFlow "assets/audio" folder, but it's not sending the audio, I put it in the edge function, I think it would be correct, can anyone help me?
Send Push Notifications with OneSignal + Supabase
Integrations
my code here: import { createClient } from 'npm:@supabase/supabase-js@2';
// Interface que corresponde à estrutura da tabela de notificações
interface Notification {
id: number;
id_usuario: number; // id do usuÔrio que recebe a notificação
mensagem: string | null; // mensagem do corpo da notificação
enviado: boolean | null; // status se foi enviado
id_pedido: number | null; // ID de pedido relacionado
titulo: string | null; // tĆtulo dinĆ¢mico da notificação
uuid: string | null; // UUID associado à notificação
}
// Interface do payload do webhook
interface WebhookPayload {
type: 'INSERT';
table: string;
record: Notification;
schema: 'public';
}
// Inicializando o cliente Supabase
const supabase = createClient(
Deno.env.get('SUPABASE_URL')!,
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
);
// Configurando a API do OneSignal
const oneSignalUrl = "https://onesignal.com/api/v1/notifications";
const oneSignalAppId = Deno.env.get('oneSignalAppId');
const oneSignalApiKey = Deno.env.get('oneSignalApiKey ');
// Função para enviar notificações via OneSignal
async function sendPushNotification(externalUserId: string, title: string, message: string) {
console.log("Enviando notificação...");
console.log("externalUserId:", externalUserId);
console.log("app_id:", oneSignalAppId);
console.log("title:", title);
console.log("message:", message);
const headers = new Headers();
headers.append("Authorization", "Basic oneSignalApiKey ");
headers.append("Content-Type", "application/json");
const bodyData = {
include_external_user_ids: [externalUserId], // lista de usuÔrios para enviar a notificação
app_id: "app_id",
headings: { en: title },
contents: { en: message },
android_sound: "caixa-som", // Nome do arquivo de som para Android (sem extensão)
ios_sound: "assets/audio/caixa-som.wav", // Caminho completo do arquivo para iOS
};
console.log("Dados enviados na requisição:", bodyData);
const response = await fetch(oneSignalUrl, {
method: 'POST',
headers: headers,
body: JSON.stringify(bodyData),
});
console.log("Resposta da OneSignal:", response.status, response.statusText);
if (!response.ok) {
const responseData = await response.json();
console.error("Erro ao enviar notificação via OneSignal:", responseData);
throw new Error(`Erro ao enviar notificação via OneSignal: ${response.statusText}`);
}
const responseData = await response.json();
console.log("Dados da resposta:", responseData);
return responseData;
}
// Servindo a função que serÔ chamada pelo webhook
Deno.serve(async (req) => {
const payload: WebhookPayload = await req.json();
console.log("Payload recebido:", payload);
// Verificar se a notificação jÔ foi enviada
if (payload.record.enviado) {
console.log("Notificação jÔ foi enviada.");
return new Response(
JSON.stringify({ message: 'Notificação jÔ foi enviada.' }),
{ headers: { 'Content-Type': 'application/json' } }
);
}
// Buscando o UUID do usuƔrio na tabela de usuƔrios
const { data, error } = await supabase
.from('usuarios')
.select('uuid_auth_user') // Nome da coluna onde o UUID estĆ” armazenado
.eq('uuid_auth_user', payload.record.uuid)
.single();
if (error) {
console.error("Erro ao buscar UUID:", error.message);
throw new Error(`Erro ao buscar UUID: ${error.message}`);
}
const uuid = data!.uuid_auth_user;
console.log("UUID do usuƔrio encontrado:", uuid);
// Enviando a notificação via OneSignal
const title = payload.record.titulo || 'Nova Notificação';
const message = payload.record.mensagem || 'Você tem uma nova notificação.';
try {
await sendPushNotification(uuid, title, message);
// Atualizando o campo 'enviado' da notificação para TRUE
const { error: updateError } = await supabase
.from('notification') // Nome da tabela de notificaƧƵes
.update({ enviado: true })
.eq('id', payload.record.id);
if (updateError) {
console.error("Erro ao atualizar o campo 'enviado':", updateError.message);
throw new Error(`Erro ao atualizar o campo 'enviado': ${updateError.message}`);
}
console.log("Notificação enviada com sucesso.");
return new Response(
JSON.stringify({ message: 'Notificação enviada com sucesso.' }),
{ headers: { 'Content-Type': 'application/json' } }
);
} catch (error) {
console.error("Erro ao enviar notificação:", error.message);
return new Response(
JSON.stringify({ error: error.message }),
{ headers: { 'Content-Type': 'application/json' } }
);
}
});
No
1