2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2024년 7월 13일 14:14 #128072
배승원참가자지금 특정 시간마다 firestroe에 저장된 fcm 토큰값을 불러와서 자동으로 메시지를 전송하는 기능을 만들려고 합니다.
근데 firebase-admin하고 firebase-function을 사용해야 하는 것 같은데
const functions = require('firebase-functions');
이 구간에서 ReferenceError: require is not defined이 자꾸 뜹니다.
찾아보니 브라우저 환경에서는 안된다고 es6로 바꿔 import로 사용하라 하는데 정보가 적어서 정확히 어떻게 하라는지를 모르겠어서.. firebase 기반 웹이고 index.html은 다음과 같습니다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> <title>Document</title> <link href="main.css" rel="stylesheet"> <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> </head> <body> <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-firestore.js"></script> <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-storage.js"></script> <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-messaging.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> <link rel="stylesheet" href="http://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-latest.js"></script> <script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script> <script> var firebaseConfig = { firebase sdk값 }; </script> <input type="text" class="datepicker notranslate"> <div class="menusheet" id="breakfast"></div> <div class="menusheet" id="lunch"></div> <div class="menusheet" id="dinner"></div> <button type="submit" class="btn btn-primary" id="breakfast">아침</button> <button type="submit" class="btn btn-primary" id="lunch">점심</button> <button type="submit" class="btn btn-primary" id="dinner">저녁</button>
<script> //import cron from 'node-cron';
firebase.initializeApp(firebaseConfig); tokenvalue = "" tag = "DDISH_NM" if(navigator.serviceWorker){ navigator.serviceWorker.register('/firebase-messaging-sw.js') .then(function(reg){console.log('서비스워커 등록성공 :', reg)}) .catch(function(error){console.log('서비스워커 등록실패 :', error)}); } const messaging = firebase.messaging(); const db = firebase.firestore(); messaging .requestPermission() .then(function () { // 토큰 받기 return messaging.getToken(); }) .then(function (token) { console.log(token) tokenvalue = token // 이 토큰을 서버에 저장하고 필요할 때마다 사용하여 푸시 알림을 보낼 수 있습니다. }) .catch(function (err) { console.log("Unable to get permission to notify.", err); });
// 알림 받기 messaging.onMessage(function (payload) { console.log('포그라운드 메시지 수신: ', payload); const notificationTitle = payload.notification.title; const notificationOptions = { body: payload.notification.body, icon: payload.notification.icon, } new Notification(notificationTitle, notificationOptions); }); /* 오류 발생 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.everyDayTask = functions .region("asia-northeast3") .pubsub.schedule("every day 00:00") .timeZone("Asia/Seoul") .onRun(async (context) => { // 여기에 매일 실행할 코드를 작성합니다. console.log('매일 자정에 실행되는 작업입니다.'); return null; });*/
$('button[id*=breakfast]').click(function(){ tokenstr = tokenvalue.toString(); console.log(tokenstr) db.collection('breakfast').doc(tokenstr).update({key : tokenstr}).then((res)=>{ }) }) $('button[id*=lunch]').click(function(){ tokenstr = tokenvalue.toString(); console.log(tokenstr) db.collection('lunch').doc(tokenstr).update({key : tokenstr}).then((res)=>{ }) }) $('button[id*=dinner]').click(function(){ tokenstr = tokenvalue.toString(); console.log(tokenstr) db.collection('dinner').doc(tokenstr).update({key : tokenstr}).then((res)=>{ }) }) function LoadKey(){ db.collection("breakfast").doc().get().then((결과치)=>{ 결과.forEach((doc)=>{ keyvalue = doc.key }) }) } function Dayserch(date){ url = "https://open.neis.go.kr/hub/mealServiceDietInfo?ATPT_OFCDC_SC_CODE=Q10&SD_SCHUL_CODE=8490107&KEY=06c2634b191d41d78a091f2df381bf25&MLSV_YMD="+date console.log(url) FindXml(url) }/* function sayHello() { console.log("Hello, world!"); }
cron.schedule("* * * * *", function() { sayHello(); });*/ function FindXml(url){ fetch(url) .then(response => response.text()) .then(xmlString => { var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlString, "text/xml"); var tagName = tag; // 가져올 태그명 설정 var elements = xmlDoc.getElementsByTagName(tagName); if (elements.length > 0) { $('pre').remove('#va'); var values = []; for (var i = 0; i < elements.length; i++) { var listarray = []; var value = elements[i].textContent; value = value.replace(/<br\/>/g,"\n") nvalue = value.split('\n') for (var w in nvalue){ if(nvalue[w].length>18){ navalue = nvalue[w].split(' ') console.log(navalue) for (var e in navalue){ listarray.push(navalue[e]) } } else{ console.log(nvalue) listarray.push(nvalue[w]) } } values.push(listarray); console.log(values[i]); } for (var i in values[0]){ var 템플릿 = `<pre id="va">${values[0][i]}</pre>` $('#breakfast').append(템플릿) } for (var i in values[1]){ var 템플릿 = `<pre id="va">${values[1][i]}</pre>` $('#lunch').append(템플릿) } for (var i in values[2]){ var 템플릿 = `<pre id="va">${values[2][i]}</pre>` $('#dinner').append(템플릿) } } else { console.log("Tag <" + tagName + "> not found."); } }) .catch(error => { console.log("Error fetching XML:", error); }); } $(function(){ $('.datepicker').datepicker({ onSelect: function() { var date = $(".datepicker").val() console.log(date) var ndate = date.split('-') datelist=[] for(var num in ndate){ datelist[num] = ndate[num] } seldate = ndate[0]+ndate[1]+ndate[2] selndate = (seldate).toString(); Dayserch(selndate) } ,dateFormat: 'yy-mm-dd' //달력 날짜 형태 ,showOtherMonths: true //빈 공간에 현재월의 앞뒤월의 날짜를 표시 ,showMonthAfterYear:true // 월- 년 순서가아닌 년도 - 월 순서 ,changeYear: true //option값 년 선택 가능 ,changeMonth: true //option값 월 선택 가능 ,showOn: "both" //button:버튼을 표시하고,버튼을 눌러야만 달력 표시 ^ both:버튼을 표시하고,버튼을 누르거나 input을 클릭하면 달력 표시 ,buttonImage: "http://jqueryui.com/resources/demos/datepicker/images/calendar.gif" //버튼 이미지 경로 ,buttonImageOnly: true //버튼 이미지만 깔끔하게 보이게함 ,buttonText: "선택" //버튼 호버 텍스트 ,yearSuffix: "년" //달력의 년도 부분 뒤 텍스트 ,monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'] //달력의 월 부분 텍스트 ,monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'] //달력의 월 부분 Tooltip ,dayNamesMin: ['일','월','화','수','목','금','토'] //달력의 요일 텍스트 ,dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'] //달력의 요일 Tooltip ,minDate: "-5Y" //최소 선택일자(-1D:하루전, -1M:한달전, -1Y:일년전) ,maxDate: "+5y" //최대 선택일자(+1D:하루후, -1M:한달후, -1Y:일년후) }); }) </script> </body> </html>
2024년 7월 13일 18:27 #128097
codingapple키 마스터functions 기능은 서버코드라서 html파일에 작성하진 않습니다 공식 가이드대로 js파일하나 만들어서 거기다가 코드짭시다
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.