투케이2K

124. (TWOK/UTIL) [Android/Java] C_FirebaseRemoteConfig - 파이어베이스 리모트 컨피그 원격 공지 확인 클래스 본문

투케이2K 유틸파일

124. (TWOK/UTIL) [Android/Java] C_FirebaseRemoteConfig - 파이어베이스 리모트 컨피그 원격 공지 확인 클래스

투케이2K 2024. 3. 6. 20:23

[설 명]

프로그램 : Android / Java

설 명 : C_FirebaseRemoteConfig - 파이어베이스 리모트 컨피그 원격 공지 확인 클래스

 

[소스 코드]

 

package com.example.javaproject.C_Firebase;

import android.app.Activity;
import android.content.Context;

import com.example.javaproject.C_Util;
import com.example.javaproject.S_Log;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;

import java.util.HashMap;

import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;

public class C_FirebaseRemoteConfig {


    /**
     * // --------------------------------------------------------------------------------------
     * TODO [클래스 설명]
     * // --------------------------------------------------------------------------------------
     * 1. 파이어베이스 리모트 컨피트 관리 클래스
     * // --------------------------------------------------------------------------------------
     * 2. 참고 : 실제 운영 환경에서 파이어베이스 리모트 컨피그는 1시간에 4회 이상 호출 하면 에러가 발생 (즉, 20 분 마다 시간 측정 후 1번 씩 호출)
     * // --------------------------------------------------------------------------------------
     * */





    /**
     * // --------------------------------------------------------------------------------------
     * TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // --------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Get Key] : 특정 키 값 호출
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     */





    // -----------------------------------------------------------------------------------------
    // TODO [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    private static final String ACTIVITY_NAME = "C_FirebaseRemoteConfig";





    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [Observable] : [Get Key] : 특정 키 값 호출
    // -----------------------------------------------------------------------------------------
    // TODO [호출 방법 소스 코드]
    // -----------------------------------------------------------------------------------------
    /*
    try {
        // [팝업창 활성 수행]
        C_FirebaseRemoteConfig.observableRemoteConfigGetKey(A_Intro.this, "test_key")
                .subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
                .observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
                .subscribe(new Observer<String>() { // [Observable.create 타입 지정]
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                    }
                    @Override
                    public void onNext(@NonNull String value) {
                    }
                    @Override
                    public void onError(@NonNull Throwable e) {
                    }
                    @Override
                    public void onComplete() {
                    }
                });
    }
    catch (Exception e){
        e.printStackTrace();
    }
    */
    // -----------------------------------------------------------------------------------------
    public static Observable<String> observableRemoteConfigGetKey(Context mContext, String key){

        // [로직 처리 실시]
        return Observable.create(subscriber -> {

            try {
                S_Log._F_(mContext, ACTIVITY_NAME + " : [Firebase] [Remote Config] 원격 알림 내용 확인 수행", new String[]{ "KEY :: " + String.valueOf(key) });

                // TODO [방어 로직] : 널 체크
                if (C_Util.stringNotNull(key) == true){

                    // [파이어베이스 리모트 객체 생성 실시]
                    FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
                    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings
                            .Builder()
                            .setMinimumFetchIntervalInSeconds(0) // TODO [Fetch 읽기 딜레이 시간]
                            .build();

                    // [해당 키값이 없을 경우 디폴트 값 삽입]
                    HashMap defaultMap = new HashMap <String, String>();
                    //defaultMap.put("app_version_aos", "0.0.0");
                    defaultMap.put(key, "");
                    config.setDefaultsAsync(defaultMap);
                    config.setConfigSettingsAsync(configSettings);

                    // [이벤트 리스너 수행 실시]
                    config.fetchAndActivate()
                            .addOnCompleteListener(
                                    (Activity) mContext, // [액티비티]
                                    new OnCompleteListener<Boolean>() { // [이벤트 리스너]
                                        @Override
                                        public void onComplete(@NonNull Task<Boolean> task) {
                                            if (task.isSuccessful()) { // [해당 키값 확인 성공]
                                                S_Log._F_(mContext, ACTIVITY_NAME + " : [Firebase] [Remote Config] [Success] - Remote Config Connection : onComplete", new String[]{ "KEY :: " + String.valueOf(key), "VALUE :: " + String.valueOf(config.getString(key)) });

                                                try {
                                                    subscriber.onNext(String.valueOf(config.getString(key)));
                                                    subscriber.onComplete();
                                                }
                                                catch (Exception e){}

                                            }
                                            else { // [해당 키값 확인 실패]
                                                S_Log._F_(mContext, ACTIVITY_NAME + " : [Firebase] [Remote Config] [Error] - Remote Config Connection : unSuccess", new String[]{ "KEY :: " + String.valueOf(key) });

                                                try {
                                                    subscriber.onNext("");
                                                    subscriber.onComplete();
                                                }
                                                catch (Exception e){}

                                            }
                                        }
                                    })
                            .addOnFailureListener(error -> {
                                S_Log._F_(mContext, ACTIVITY_NAME + " : [Firebase] [Remote Config] [Fail] - Remote Config Connection", new String[]{ "ERROR :: " + String.valueOf(error.getMessage()) });

                                try {
                                    subscriber.onNext("");
                                    subscriber.onComplete();
                                }
                                catch (Exception e){}

                            });
                }
                else {
                    S_Log._F_(mContext, ACTIVITY_NAME + " : [Firebase] [Remote Config] [Error] - Remote Config Connection", new String[]{ "ERROR :: Input Data Is Null" });

                    try {
                        subscriber.onNext("");
                        subscriber.onComplete();
                    }
                    catch (Exception ex){
                        ex.printStackTrace();
                    }

                }

            } catch (final Exception e){
                S_Log._printStackTrace_(mContext, ACTIVITY_NAME + " : [Firebase] [Remote Config] [Exception]", null, e);

                // ------------------------------------------------------
                // TODO [리턴 데이터 반환]
                // ------------------------------------------------------
                try {
                    subscriber.onNext("");
                    subscriber.onComplete();
                }
                catch (Exception ex){
                    ex.printStackTrace();
                }
            }

        });
    }


} // TODO [클래스 종료]

 

반응형
Comments