[21. 파이어스토어, 스토리지, FCM]
[21-1. 파이어스토어 데이터베이스]
[파이어베이스 제공. 클라우드 기반 데이터베이스]
파이어스토어 데이터베이스 |
실시간 데이터베이스 |
[파이어스토어 사용 설정]
-모듈 수준의 build.gradle 파일에 파이어스토어 라이브러리 등록
implementation ‘com.google.firebase:firebase-firestore-ktx:21.2.1’
[파이어스토어 데이터 모델]
-파이어스토어는 NoSQL DB이므로 테이블/행 X
-컬렉션 안에 문서 단위로 데이터 저장됨
-각 문서에 키-값 쌍의 데이터 저장됨
[파이어스토어 보안 규칙]
-match 구문으로 데이터베이스 문서 식별
-allow 구문으로 접근 권한 작성
1) 모든 문서 읽기/쓰기 거부
rules_version = ‘2’;
service cloud.firestore {
match/databases/{database} /documents {
match / {document =**} { //모든 문서에 대하여
allow read, wirte = if false; //읽기/쓰기 거부
}
}
}
2) 모든 문서 읽기/쓰기 허용
rules_version = ‘2’;
service cloud.firestore {
match/databases/{database} /documents {
match / {document =**} { //모든 문서에 대하여
allow read, wirte = if true; //읽기/쓰기 허용
}
}
}
3) 인증된 사용자에게만 모든 문서 허용
rules_version = ‘2’;
service cloud.firestore {
match/databases/{database} /documents {
match / {document =**} { //모든 문서에 대하여
allow read, wirte = if request.auth.uid != null; //인증된 사용자에게 허용
}
}
}
4) 자신의 데이터만 읽기/쓰기 허용
rules_version = ‘2’;
service cloud.firestore {
match/databases/{database} /documents {
match /users/{userId}
allow read, update, delete : if request.auth.uid == userId;
allow create : if request.auth.uid != null;
}
}
}
5) 문서에 저장된 데이터 활용
rules_version = ‘2’;
service cloud.firestore {
match/databases/{database} /documents {
match / cities/{city}
allow read: if resource.data.visibility == ‘public’;
}
}
}
6) 사용자 데이터 VS 데이터베이스의 데이터 비교
rules_version = ‘2’;
service cloud.firestore {
match/databases/{database} /documents { {
allow update: if request.resource.data.population > 0
&& request.resource.data.name == resource.data.name;
}
}
}
[‘파이어스토어’에 데이터 저장하기]
-안드로이드 앱에서 파이어스토어 이용하여 데이터 저장 O
-파이어스토어 객체 얻기 : FirebaseFirestore 객체
-FirebaseFirestore 객체로 ‘컬렉션’ 선택하고 문서 추가 or 가져오는 작업
<파이어스토어 객체 얻기>
1) db.collection()으로 컬렉션 선택과 동시에 문서작업용 CollectionReference 객체 얻기
2) 반환받은 CollectionReference 객체의 add()/set()/get() 등의 함수로 문서 작업
var db: FirebaseFirestore = FirebaseFirestore.getInstance()
▶[데이터 저장]
⇒ [ add() 함수 ] : 데이터 저장 함수
⇒ [ set() 함수 ] : ‘문서 전체 덮어쓰기’ 함수
- 신규 데이터 저장 + 기존 데이터 변경
- document() 함수로 작업 대상 문서 지정 후, set() 으로 데이터 처리
▶[특정 데이터 업데이트/삭제]
⇒ [update() 함수 ] : 문서의 ‘특정’ 필드 업데이트
- document() 함수로 작업 대상 문서 지정 후, update() 함수로 데이터 처리
⇒ [delete() 함수 ] : 문서 데이터 삭제
1) 특정 필드값 삭제 : update()로 필드값 지정 -> FieldValue.delete() 함수 호출
2) 문서 전체 삭제 : document()로 문서 지정 -> delete() 함수 호출
▶[데이터 불러오기]
⇒ [ get() 함수 ]
1) 컬렉션의 전체 문서 가져오기
- db.collection()으로 컬렉션 지정 후, get() 호출
2) 컬렉션의 단일 문서 가져오기
- document() 에 식별값으로 문서 지정 후, get() 호출
- 가져온 문서를 ‘객체’에 담아서 사용 시, toObject() 이용
3) 조건에 맞는 문서만 가져오기
- whereXXX() 함수로 조건 설정하기
- 이 함수로 조건 지정한 Query 객체 만들고 Query 객체의 get() 호출
whereEqualTo() / whereGreaterThan() / whereIn() / whereArrayContains() /whereLessThan() / whereNotEqual To() / whereNotIn() 등 |
[21-2. 파이어베이스 스토리지] : Firebase Storage
[스토리지 사용 설정]
-파이어베이스 콘솔에서 스토리지 시작
-앱의 build.gradle 파일에 라이브러리 등록
implementation ‘com.google.firebase:firebase-storage-ktx’
[파일 올리기]
-스토리지 사용을 위해서는 FirbaseStorage 객체 얻어야 함
<FirebaseStorage 객체 얻기>
val storage: FirebaseStorage=Firebase.storage
<스토리지 참조 만들기>
- storage.reference 로 StorageReference 객체 얻기
- child() 함수로 파일 경로가 담긴 StorageReference 객체를 다시 만들기
- 이 객체 이용해서 파일 내려받거나 올리기 가능
▶[스토리지에 파일 올리기]
⇒ [putBytes() 함수] : 바이트값 저장
⇒ [putStream() 함수] : 파일 스트림으로 업로드
⇒ [putFile() 함수] : 파일 경로로 업로드
⇒ [delete() 함수] : 업로드된 파일 삭제
[파일 내려받기]
▶[스토리지에 저장된 파일 내려받기]
⇒ [getBytes() 함수] : 바이트값 가져오기
⇒ [getFile() 함수] : 로컬 저장소에 파일 내려받기
⇒ [downloadUrl() 함수] : 스토리지 파일의 URL 얻기
⇒ [firebase-ui-storage 라이브러리 이용]
[21-3. 이미지 공유 앱 만들기] : 실습
[21-4. 파이어베이스 클라우드 메시징] : FCM
[클라우드 메시징의 원리]
-파이어베이스 클라우드 메시징 (Firebase Cloud messaging) : 서버에서 특정 상황이나 데이터 발생 시 앱에 알림 전달 기능 (서버 푸시)
-서버 데이터를 앱에 직접 전달 X
-FCM 서버를 거쳐서 앱에 전달 O
-연결 지속 유지하지 않아도, 앱이 포그라운드 상황이 아니어도 데이터 받을 수 O
[클라우드 메시징에서 데이터가 앱에 전달되는 과정]
1단계 : 토큰 발급
-FCM 서버에 전달된 데이터를 특정 기기 앱에 전달하려면 앱 구분 식별값 = ‘토큰’ 필요
<토큰 발급 절차> 1) 클라우드 메시징 이용 앱이 폰에 설치되면 자동으로 안드로이드 시스템이 FCM 서버에 토큰 발급 요청함 2) FCM 서버에서 앱 식별 토큰 발급해서 폰에 전달 3) 앱에 전달된 토큰은 FCM 서버에서 메시지 발생할 때 서버에 전달 4) 서버에서 전달받은 토큰을 DB(데이터베이스)에 저장 |
2단계 : 서버에서 앱으로 데이터 전송
<데이터 전달 흐름> 1) 서버에서 특정 상황 발생 시, DB에 저장했던 토큰 추출하여 앱 식별 2) 서버에서 사용자에게 전달할 메시지와 토큰을 FCM 서버에 전달 3) FCM 서버에서 토큰 분석하여 해당 폰에 메시지 전달 |
-> 두 단계 모두 ‘서비스 컴포넌트’ 작성 필요
[클라우드 메시징 설정]
1) build.gradle 파일에 관련 라이브러리 등록
2) 매니페스트 설정
-FCM 서버에 전달하는 정보: 토큰/알림/데이터 구분
-<meta-data>로 알림 자동 발생 설정
3) 서비스 컴포넌트 작성
-FCM 토큰, 메시지 받는 서비스 작성
-FirebaseMessagingService 상속받는 클래스 작성
-내부에 onNewToken() 재정의 시, FCM 서버로부터 토큰 전달될 때 자동 호출됨
-내부에 onMessageReceived() 함수 재정의 시, FCM 서버에서 메시지 전달될 때 자동 호출됨
[21-5. 서버에서 보내는 알림 받기] : 실습
[참고] : Do It 안드로이드 앱 프로그래밍 with 코틀린 |
'App(앱)_관련 공부 모음 > [교재] Andorid App_Kotlin 기반' 카테고리의 다른 글
20. [파이어베이스 연동과 인증 기능] (0) | 2022.03.31 |
---|---|
19. [위치 정보 활용] (0) | 2022.03.30 |
18. [네트워크 프로그래밍] (0) | 2022.03.26 |
17. [저장소에 데이터 보관] (0) | 2022.03.25 |
16. [콘텐츠 프로바이더 컴포넌트] (0) | 2022.03.24 |