일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 빈
- Android
- Service
- workmanager
- PHP
- jobschduler
- schedule
- jobdispatcher
- Library
- shceduler
- 검사
- alarmanager
- firebase
- Job
- epmty
- Background
- livedatam
- Today
- Total
에몽이
fcm 본문
Part 1에 이어서 이제 앱서버(웹서버)쪽 작업을 해 보자. Part1에서는 콘솔에서 메시지를 발송하는데 까지 완료 했다. 여기서는 콘솔페이지 대신에 PHP를 이용해서 안드로이드에서 넘어온 토큰 데이터를 서버의 DB에 저장하는 한다. 그러면 언제든지 데이터베이스에 저장된 토큰을 바탕으로 FCM서버에 알림요청을 할 수 있게 된다. 쉽게 말해 알림을 보낼 수 있는 관리자페이지를 만든다고 생각하면 된다.
마지막으로 워드프레스에서 새로운 글을 등록하면 이 PHP스크립트를 실행해서 새글 알림을 폰으로 보내도록 하는 프로그래밍을 할 예정이다. 이것이 개인적인 최종 목적이다. 물론 다른 형태로 얼마든지 활용할 수 있겠지만 다음에 시도해 보기로 하자.
Mysql DB
먼저 phpMyAdmin으로 접속해서 FCM 푸시알림에서 사용할 데이터베이스를 하나 추가하자. fcm이라고 하자.
새로 만들어진 데이터베이스에 새로운 테이블을 추가한다.
php 스트립트 작성
resigster.php
이렇게 토큰을 저장할 테이블을 만들었다. 이제 PHP 스크립트를 작성해 보자.
Part 1에서 register.php라는 토큰을 저장할 스크립트 파일을 지정한 적이 있다. 이제 그 파일을 작성해 주면 되는 것이다.
인클루드 한 config.php에는 데이터 베이스 접속 정보와 구글 API_KEY가 등록되어 있다. 이부분은 뭐 코드 작성하기 나름인듯 하다.
구글 API KEY가 필요하다. 이게 어디 있지?
Firebase 콘솔 페이지에 다시 접속한다.
<2017년 추가사항> Firebase 콘솔 화면 디자인이 변경이 있음
서버키 타입이 달라졌다고 함. 기존의 것을 사용해도 되지만 최신 타입의 키를 사용하길 권장한다고 함....
해당 프로젝트의 관리 화면으로 들어가서 클라우드메세징 탭을 선택하면 아래쪽에 서버키가 등록되어 있는 것을 확인할 수 있다. 이 키값을 카피해서 가져 온다.
이 키를 config.php에 입력해 주면 된다.
앱이 폰에 설치되면서(이건 프로래밍 하기 나름이겠지만) 기기를 FCM서버에 등록하고 고유한 토큰을 받는다. 이 토큰을 register.php로 전송해서 데이터베이스에 저장하게 된다. 이게 안되면 뭔가 문제가 있는 것이다.이 단계에서 앱에서 토큰이 제대로 전송이 되는지 체크해야 하고 또 DB에도 제대로 등록이 되는지를 체크해야 한다. 저장된 토큰이 없는데 메세지가 갈리 없다.
FCM 서버에 푸시알림 요청하기
push_notification.php
10개의 폰에 앱이 설치 되었다면 토큰 10개가 저장된다. 이제 이 데이터를 가져와서 FCM에 메세지를 보내도록 요청하는 PHP 스크립트를 작성해 보자.
push_notification.php 라는 이름으로 위 코드를 저장했다. 이 스트립트 파일은 데이터베이스에서 현재 저장되어 있는 토큰을 모두 가져와서 FCM 서버에 각각의 폰에 메세지를 보내도록 요청할 것이다.
실제 작동이 되는지 이 PHP파일을 웹브라저에서 불러 실행해 보면 된다. 제대로 작동하지 않는다면 서버에 curl 이 제대로 설치되어 있는지 체크 하자.
정상적으로 실행이 되었다면 그 결과를 보여주고 실제 해당 폰에는 푸시알림이 도착해 있을 것이다. 해당 알림을 클릭하면 앱이 실행된다.
여기서 다른 모양으로 폼을 만들어서 관리자가 사용자에게 보낼 메세지를 직접 작성해서 보내는 형식으로 만들어도 되지만 원래의 목적대로 워드프레스에 새글이 등록되면 이 스크립트가 실행되게 해주면 모든 작업이 끝이 난다.
메세지 보내기 입력창을 만들어 보자.
메인페이지 만들기
그전에 잠시 메세지를 보낼 수 있는 index 페이지를 간단히 만들어 보자.
push_notification.php파일도 폼데이터를 넘겨 받을 수 있도록 약간 수정해 줘야 한다.
워드프레스 새글 등록되면 푸시알림 보내기
wordpress
워드프레스에서 아무리 새글을 작성해도 푸시알림이 가지 않더니 겨우 해결 했다. 데이터베이스 연결과정에 문제가 있었다. define으로 변수 지정한것이 말썽이었는데 define이 어떤 개념인지 좀 더 알아 봐야 겠다. 기초가 모르고 할려니 ... ㅋ 암튼 해결!!!
워드프레스 테마의 functions.php 파일을 열어서 맨 아래 위 함수를 추가해 준다. 새글이 등록되면 앞 단계에서 만들어 놓은 push_notification.php파일을 인클루드해서 실행되게 했다.
포스팅한 글을 업데이트 할때나 특정 포스트타입일때만 알림이 가도록 할 수도 있는듯 하다. 하지만 다 필요 없고 새글만 등록되면 가도록 하였다.
<디버깅 1>
혹시 앱에서 정상적으로 토큰이 생성이 되었다고 나오고 이상이 없는데 DB에 아무런 토큰이 저장이 되지 않는다면 아래와 같이 DB접속 관련 파일(register.php)을 수정해서 체크 해보자.
<디버깅 2>
앱에서 토큰값이 넘어 오기는 하는지를 체크 해 보자. 넘어 온 토큰을 DB에 말고 txt파일로 서버에 저장에 보고 확인하자. 정상적으로 txt파일을 열어서 값이 저장되어 있으면 넘어 오는데는 문제가 없는 것이다. DB 저장에서 문제가 있는 것이다. 다음 단계에서 체크 하자.
register.php파일의 내용을 위 처럼 해서 웹브라우저에서 직접 실행해 보자. 에러가 있다면 브라우저에 표시해 줄것이다. 암호가 잘못되었다던지 접속에 문제라든지 입력에 문제라든지....
여기서 에러가 나온다면 DB에 문제가 있을 수 있으니 유저네임이나 암호, 혹은 기타 DB관련 내용을 점검해 볼 필요가 있겠다.
<디버깅 3>
앞단계에 이상이 없고 push_notification.php를 웹브라저에서 실행했을 때 '페이지를 작동할 수 없다'는 에러가 나온다면 서버에 curl이 설치 되어 있지 않거나 버전이 맞지 않거나 할 수 있는것 같다. 라즈베리파이에 접속해서 php5-curl를 설치해 주자. 이미 curl이 설치 되어 있는것 같은데 뭔가 안 맞는 모양이다. 다시 설치 해 주자.
$ sudo apt-get install php5-curl
그리고 웹서버를 재시작 해준다.
$ sudo apt-get install php5-curl
다시 push_notification.php를 실행해 보면 제대로 메세지를 보내는 것을 확인 할 수 있다.
[출처] http://blog.naver.com/PostView.nhn?blogId=cosmosjs&logNo=220740118136&parentCategoryNo=56&categoryNo=&viewDate=&isShowPopularPosts=true&from=search
'android' 카테고리의 다른 글
ContentProvider, ContentResolver (0) | 2017.08.24 |
---|---|
[안드로이드]개발할때만 Log 남기는 방법 - Debug Log (0) | 2017.07.11 |
채팅 라이브러리 (0) | 2017.06.30 |
How to fix: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (0) | 2017.06.30 |
opencv 유투브 (0) | 2017.06.30 |