일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- caddy
- javascript
- 해석
- 컴퓨터과학총론
- 개발자
- H2O
- centOS7
- unity
- server
- techEmpower
- ubuntu
- error
- 구글
- 번역
- android
- java
- NGINX
- mariadb
- Portfolio
- 프래그먼트
- C
- 한글
- kakao
- 안드로이드
- C lanuage
- MySQL
- 개발
- 자바
- php
- it
- Today
- Total
개발모음집
fcm token 중복없이 저장하기 본문
fcm_no not null primary key auto_increment , fcm_token, fcm_email 칼럼으로 FCM_TB 이라는 테이블을 만들었고,
fcm 알림이 오면 이메일과 토큰을 저장해주었다.
$sql = "INSERT INTO FCM_TB (fcm_token, fcm_email) VALUES('$token','$userId') ON DUPLICATE KEY UPDATE fcm_token = '$token'";
ON DUPLICATE KEY UPDATE 문은 select할 때 primarykey와 동일한 값이 없으면 데이터를 insert 하고, 있으면 update하는 구문이다.
이런식으로 구현하니 한 디바이스에서 한 아이디로 자동로그인만 한다면 에러가 나지않았다.
하지만 로그아웃을 하고 로그인 액티비티로 가면 빈 로우가 삽입되고, 같은 이메일로 로그인하면 새로운 토큰값을 할당받아 내 디비에 저장하는 일이 발생하였다. 구조파악을 해보니 ON DUPLICATE KEY UPDATE 문은 primary키로 중복을 체크하는 것이었다.
내 primary키는 auto_inclement속성을 주어서 계속 증가하니 중복체크를 해도 중복이 될리가 없었고, 계속 insert하는 문제가 있었던 것.
그래서 FCM_TB의 fcm_no 컬럼을 삭제하고, fcm_email을 primary키로 변경하였다.
참고블로그를 참고하여
$sql = "INSERT INTO FCM_TB (fcm_token, fcm_email) VALUES('$token','$userId') ON DUPLICATE KEY UPDATE fcm_email = '". $userId . "', fcm_token = '$token'";
그리고 fcm 알림이 오면 이런 식으로 insert해주었는데
ON DUPLICATE KEY UPDATE fcm_email = '". $userId . "', fcm_token = '$token'";
fcm_email을 검색해서 이미 있으면 update를 하고, 이메일이 없다면 insert하라는 문장이다.
이렇게 하니까 중복해서 디비로우값이 추가되던가 null row가 추가되는 경우는 없어졌고,
한 디바이스에서 두 아이디를 로그인하면, 토큰값은 동록하고 디비에 fcm_email만 변경되는 것을 확인하였다.
'Android' 카테고리의 다른 글
안드로이드, 서버에 있는 이미지 쉽게 다운로드하기 AQUERY (0) | 2017.08.09 |
---|---|
TarsosDSP - AudioDispatcher start() status -38 error (0) | 2017.08.08 |
RecyclerView Paging (0) | 2017.08.08 |
glide 대신 picasso 라이브러리 사용한 이유 (0) | 2017.08.08 |
ButtonBarSheet listview scroll issue (0) | 2017.08.08 |