* 목표 :
- 각기다른 프로젝트 A,B 에 등록된 a_app에서 CloudStore 데이터 값 가져오기
(!Firebase는 기본적으로 한개의 프로젝트 안에 여러개의 App을 등록하여 사용 할 수있는 구조이다.)
* 준비물 :
- 안드로이드 스튜디오로 생성한 a_app
- Firebase CloudStore를 사용 할 준비가 되어있는 프로젝트 A(A_proj)
- a_app 프로젝트 A에 등록 시키기
- Firebase CloudStore를 사용 할 준비가 되어있는 프로젝트 B(B_proj)
- a_app 프로젝트 B에 등록 시키기
- A_proj 의 google-services.json 파일의 내용과 B_proj 의 google-services.json 파일을 합친 google-services.json 파일
(참고 https://85chong.tistory.com/115)
* 간략 진행
1.setOption
- 가져올 데이터 project 셋팅
2.initialApp
- app에 셋팅
3.setColloction
- CloudStore 셋팅
4.addSnapEventListener
- CloudStore 데이터 가져오기 및 이벤트 callback
5.위의 과정을 A_proj 의 CloudStore 셋팅과 B_proj의 CloudStore 셋팅을 따로 해주고, 알맞게 사용하면 됨
* 상세 진행(A_proj의 과정만 기록 하겠음)
1. setOption
- 우선 위에서 준비한 google-services.json 파일에서 사용할 데이터를 따로 준비 해 놓아야 함
- A_APP_PROJECT_ID = "xxxxxxxxxx..." (google-services.json 안에 project_info > project_id 값이다)
- A_APP_APPLICATION_ID = "xxxxxxxxxx..." (google-services.json 안에 client > client_info > mobilesdk_app_id 값이다)
- A_APP_DATA_URL = "xxxxxxxxxx..." (google-services.json 안에 project_info > firebase_url 값이다)
- A_APP_API_KEY = "xxxxxxxxxx..." (google-services.json 안에 client > api_key > currenty_key 값이다)
- A_APP_OPTION_NAME = "a_App"
- A_PROJ_COLLECTION = "collection"
- A_PROJ_DOCUMENT = "document"
- 전역변수 준비
lateinit var mDocRef_A_App: DocumentReference
lateinit var mFirebaseA_App: FirebaseFirestore
lateinit var mOptionsA_App: FirebaseOptions
1-1. option 셋팅하기
private fun setA_AppOption() {
mOptionsA_App = FirebaseOptions.Builder()
.setProjectId(A_APP_PROJECT_ID)
.setApplicationId(A_APP_APPLICATION_ID)
.setApiKey(A_APP_API_KEY)
.setDatabaseUrl(A_APP_DATA_URL)
.build()
}
2. initialApp
private fun instanceA_App() {
var firebaseApps = FirebaseApp.getApps(this)
if(firebaseApps!=null && !firebaseApps.isEmpty()){
for(app:FirebaseApp in firebaseApps){
if(app.name.equals(A_APP_OPTION_NAME)){
mFirebaseA_App = FirebaseFirestore.getInstance(app)
return
}
}
}
val app = FirebaseApp.initializeApp(this,mOptionsA_App,A_APP_OPTION_NAME)
mFirebaseA_App = FirebaseFirestore.getInstance(app)
}
3. setColloction
fun getCloudDataA_App(){
mDocRef_A_App = mFirebaseA_App.collection(A_PROJ_COLLECTION).document(A_PROJ_DOCUMENT)
mDocRef_A_App.addSnapshotListener(documentSnapEventListenerCashierest())
}
4. addSnapEventListener
fun documentSnapEventListener(): EventListener<DocumentSnapshot> = object :
EventListener<DocumentSnapshot> {
override fun onEvent(value: DocumentSnapshot?, error: FirebaseFirestoreException?) {
if(error!=null || value==null || !value.exists()){
return
}
// 여기서는 별도의 data class 를 만들어서 object로 변환시켜 데이터를 받아오면 됨
//ex) val resData:ResData = value?.toObject(ResData::class.java)!!
}
}
* 위의 과정을 가져오고 싶은 프로젝트 및 앱에 적용 시켜 값을 설정하면, 가져와 사용이 가능하게 된다.
- 끝 -
'Kotlin Study' 카테고리의 다른 글
Kotlin Coroutine 기본 동작 방식 (0) | 2022.04.20 |
---|---|
Kotlin , null 처리 방법 (0) | 2021.07.05 |
Android HashKey 구하기 (feat.Kotlin) (0) | 2021.03.19 |
코루틴 간단하게 바로 사용 할 수 있는방법 (0) | 2021.03.12 |
view binding in Class(findViewById,Kotlin) (0) | 2021.03.02 |