programing

Firebase 앱이 Android에서 이미 초기화되었는지 확인하는 방법

randomtip 2022. 9. 14. 22:09
반응형

Firebase 앱이 Android에서 이미 초기화되었는지 확인하는 방법

다음과 같이 처음 호출하면 작동하지만 "FirebaseApp name [DEFAULT]가 이미 존재합니다!"인 후속 호출에서는 실패합니다.

public FirebaseDatabase conn(Context c) {
         FirebaseOptions options = new FirebaseOptions.Builder()
                .setApiKey("key")
                .setDatabaseUrl("url")
                .setApplicationId("ID")
                .build();


        /////I tried Try and Catch with no success//////
        FirebaseApp app = FirebaseApp.initializeApp(c, options);

        /// for this : FirebaseApp app = FirebaseApp.initializeApp(c, options, "some_app");
        //// will fail with "FirebaseApp name some_app already exists!"
        return FirebaseDatabase.getInstance(app);
}

위의 모든 것은 두 번째 Firebase 앱에 연결하려는 시도입니다.

파이어베이스 웹에서는 이미 초기화되었는지 확인합니다.

if (firebase.apps.length === 0) {
    firebase.initializeApp({});
}

v9에서는 Firebase는 트리 흔들림을 개선하기 위해 모듈화되어 있습니다.따라서 더 이상 전체 앱을 가져오고apps자산 AFAIK.대신 다음과 같은 방법을 사용할 수 있습니다.

import { initializeApp, getApps, getApp } from "firebase/app";
getApps().length === 0 ? initializeApp(firebaseConfig) : getApp();

https://firebase.google.com/docs/reference/js/v9/app.md#getapps (문서 참조)

Android에서 승인된 답변과 동일한 방법을 알고 싶은 경우:

if (FirebaseApp.getApps(context).isEmpty()) {
    FirebaseApp.initializeApp(context);
}

계측 테스트 환경에서는 다음 컨텍스트를 사용합니다.

InstrumentationRegistry.getContext()

파이어베이스 버전 9

import { initializeApp, getApp } from "firebase/app";

const createFirebaseApp = (config = {}) => {
  try {
    return getApp();
  } catch () {
    return initializeApp(config);
  }
};

const firebaseApp = createFirebaseApp({/* your config */})

Firebase 어플리케이션인스턴스를 취득하려고 하면, 초기화가 되어 있는지, 그렇지 않은 경우,IllegalStateException.

    try{
        FirebaseApp.getInstance();
    }
    catch (IllegalStateException e)
    {
        //Firebase not initialized automatically, do it manually
        FirebaseApp.initializeApp(this);
    }

앱을 초기화하기 전에 실행 중인 앱 목록을 확인하는 것이 좋을 것 같습니다.각 SDK에는 이 어레이를 가져오는 방법이 있습니다.안드로이드에서는getApps:

https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseApp.html

그러면 앱이 이미 초기화되었는지 확인할 수 있습니다.

저 같은 경우에는 어레이 길이를 확인하고 (javascript/web sdk를 사용하고 있기 때문에 Android는 조금 다르다고 생각합니다) 0이면 새로운 앱을 초기화했습니다.

나도 비슷한 문제에 직면했다.이미 초기화된 앱을 삭제하여 아래의 문제를 해결하였습니다.

    // Access your firebase app
    let app = firebase.app();
    // Delete your app.
    app.delete(app);

솔루션은 웹에 유효합니다.

firebase admin SDK for java에서 앱이 없는 경우에만 앱을 초기화합니다.

if (FirebaseApp.getApps().isEmpty()) {
    FirebaseApp.initializeApp();
}

안드로이드는 잘 모르겠지만 싱글톤 방식을 사용하는 것은 어떨까요?JS에서는 이 작업을 수행할 수 있습니다.이게 도움이 됐으면 좋겠는데

// Config file
import * as firebase from "firebase";

const config = {...};

export default !firebase.apps.length ? firebase.initializeApp(config) : firebase.app();

// Other file
import firebase from '../firebase';
import * as firebase from "firebase/app";
firebase.apps.map(e => e.name); // Give you an array of initialized apps

dotNet FirebaseAdmin SDK를 사용하는 사용자용

if (FirebaseApp.GetInstance("[DEFAULT]") == null)
{
    var createdApp = FirebaseApp.Create(new AppOptions()
    {
        Credential = GoogleCredential.FromFile("private-key.json")
    });
}

같은 문제에 직면하여 다음과 같이 해결했습니다.

  1. 응용 프로그램의 var를 생성하고 null로 초기화합니다.
  2. 초기화 중에 응용 프로그램 참조
  3. 다시 초기화하기 전에 확인하세요.

//global variable
var firebaseResumeDownloadAdd = null;

//inside function check before initializing
if(firebaseResumeDownloadAdd==null){
   firebaseResumeDownloadAdd =
   firebase.initializeApp(functions.config().firebase);
}

Daniel Laurindo의 답변에 따라 달라집니다.

if (FirebaseApp.getApps(context).size != 0) {

} 

ES6+를 위한 보다 깨끗한 솔루션은


if (!firebase.apps.length) {
 ...
}

사용하기 쉬운 Java 8 Stream 및 옵션 기능 탑재.

아래의 코드명

FirebaseApp.getApps()
.stream()
.filter(firebaseApp -> 
    firebaseApp.getName().equals("APP_NAME"))
   .findFirst()
   .orElseGet(() -> FirebaseApp.initializeApp(firebaseOptions, "APP_NAME"));

Platform Check를 사용하여 환경에 따라 초기화합니다.

파이어베이스 웹에서 이미 초기화되었는지 확인합니다.

MYAPP() 부팅 시 다음 스니펫을 사용합니다.

import 'dart:io';

void main() async {

WidgetFlutterBinding.확실히Initialized();

if ( Platform . is Android | Platform.isIOS) {

await Firebase.initializeApp();

} 기타 {

if (Firebase.apps.isEmpty) {

  await Firebase.initializeApp(

      // connect for web to firebase
      options:firebaseOptions

}

} runApp(계속 MyApp());

}

Nativescript를 사용하여 Android | iOS용 하이브리드 모바일 앱을 구축하는 경우 다음 스크립트를 사용할 수 있습니다.

import * as firebase from 'nativescript-plugin-firebase';

_initFirebase(): Promise<any> {
    if (!(firebase as any).initialized) {
      return firebase.init({}).then(
        () => {
          console.info('firebase started...');
        },
        (error) => console.error(error)
      );
    }
  }


언급URL : https://stackoverflow.com/questions/37652328/how-to-check-if-a-firebase-app-is-already-initialized-on-android

반응형