Kotlin Study

[각기 다른 google-services.json 설정파일의 FirebasePoject, 한 App 에서 사용하기]

85chong 2021. 5. 7. 10:19
728x90
반응형
SMALL

 

* 목표 : 

- 각기다른 프로젝트 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)!!
        }
    }

 

* 위의 과정을 가져오고 싶은 프로젝트 및 앱에 적용 시켜 값을 설정하면, 가져와 사용이 가능하게 된다.


- 끝 -