Firebase.com에서 Android 앱 업그레이드

이 문서에서는 기존 Firebase.com 앱에서 새 Firebase 콘솔 및 API로 업그레이드하는 과정을 안내합니다.

다음은 4가지 단계입니다.

  1. 새 Firebase 콘솔로 프로젝트 업그레이드
  2. 새 Firebase SDK 설치
  3. 데이터베이스 코드 업데이트
  4. 인증 코드 업데이트

언제든지 프로젝트를 새 firebase.google.com 콘솔로 업그레이드할 수 있으며 애플리케이션은 계속 작동합니다. 그런 다음 애플리케이션에서 새 Firebase 기능의 일부를 사용할 준비가 되면 코드를 업데이트할 수 있습니다.

새 Firebase 콘솔로 프로젝트 가져오기

  • Firebase 콘솔로 이동하고 '현재 Firebase.com의 프로젝트'에서 프로젝트를 찾습니다.
  • 업그레이드하려는 프로젝트에 대해 가져오기를 클릭합니다.
    • 프로젝트가 firebase.com에서 유료 요금제를 사용하는 경우 새 콘솔에서 프로젝트에 대한 결제를 설정해야 합니다. 결제 정보는 자동으로 이전되지 않습니다.
    • 결제 계정을 선택하거나 만듭니다. 가져오기를 완료하면 이 계정이 프로젝트에 대한 모든 청구를 담당합니다.
  • 즉시 자동으로 Firebase 콘솔로 실시간 데이터베이스 및 호스팅 콘텐츠를 가져옵니다.
  • 사용자 데이터는 자동으로 새 인증 백엔드로 이전됩니다. 백그라운드에서 이전되므로 사용자는 데이터가 이전되는 동안 앱을 계속 사용할 수 있습니다. 사용자 가입 및 로그인은 영향을 받지 않습니다. 시스템에서 사용자 계정을 이전하는 동안 Firebase 콘솔의 인증 탭에 스피너가 표시됩니다.
  • Firebase.com 앱의 활성 프로모션 코드가 있는 경우 문의하세요.

새 Firebase SDK 설치

애플리케이션의 코드를 즉시 업데이트할 필요는 없습니다. 기존 데이터베이스 및 인증 코드는 업그레이드된 프로젝트에 대해 계속 사용할 수 있습니다. 하지만 애플리케이션에서 새 Firebase 기능의 일부를 사용할 준비가 되면 새 Firebase SDK를 설치할 수 있습니다. 새 google-services.json 파일을 다운로드하고 gradle 파일에 google-services 플러그인을 추가해야 합니다.

새 SDK를 사용하기 시작하면 Firebase용 Google 애널리틱스는 자동으로 사용됩니다. 기본적으로 애널리틱스 데이터는 다른 Firebase 기능 및 Google 제품을 개선합니다. 언제든지 설정에서 애널리틱스 데이터가 공유되는 방식을 관리할 수 있습니다. 자세히 알아보기

데이터베이스 코드 업데이트

Gradle 종속 항목 업데이트

시작하는 가장 쉬운 방법은 Gradle 종속 항목을 변경하는 것입니다.

이전

dependencies {
  compile 'com.firebase:firebase-client-android:x.x.x'
}
이후

dependencies {
  compile "com.google.firebase:firebase-database:15.0.0"
}

클래스 참조 수정

이름이 변경되거나 이동된 클래스 때문에 앱에 컴파일 오류가 많을 것입니다. 다음과 같이 간단히 교체하여 이러한 대부분의 오류를 해결할 수 있습니다.

이전 이후
com.firebase.client com.google.firebase.database
FirebaseError DatabaseError
FirebaseException DatabaseException
Firebase.AuthStateListener FirebaseAuth.AuthStateListener
Firebase DatabaseReference

찾는 클래스나 메소드가 없으면 데이터베이스 참조 문서를 살펴봅니다.

Android Context 설정 및 오프라인 지속성 사용

새 SDK에서는 Firebase.setAndroidContext()를 호출할 필요가 없으므로 코드에서 제거할 수 있습니다.

앱에서 디스크 지속성을 사용하고 있으면 이제 FirebaseDatabase 객체를 통해 사용할 수 있습니다.

이전

Firebase.getDefaultConfig().setPersistenceEnabled(true);
이후

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

2.x SDK와 마찬가지로 데이터베이스에 대한 다른 호출이 실행되기 전에 디스크 지속성을 사용해야 합니다.

데이터베이스 참조 가져오기

새 SDK에서 Firebase 참조는 DatabaseReference로 대체되고 FirebaseDatabase 클래스를 사용하여 데이베이스로 초기 참조를 가져옵니다. 따라서 다음과 같이 코드에 데이터베이스 참조를 가져올 수 있습니다.

이전

Firebase rootRef = new Firebase("https://<your-app>.firebaseio.com/");
이후

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

데이터베이스 URL은 google-services.json 파일에서 자동으로 정해지므로 지정할 필요가 없습니다. 그래도 지정하려면 할 수 있습니다. 이전하려는 용도로는 더 편리할 수 있습니다.

이전

Firebase ref = new Firebase("https://<your-app>.firebaseio.com/path/to/data");
이후

DatabaseReference ref = FirebaseDatabase.getInstance()
    .getReferenceFromUrl("https://<your-app>.firebaseio.com/path/to/data");

자바 모델 개체 업데이트

2.x SDK와 마찬가지로 Firebase 데이터베이스는 JSON으로 DatabaseReference.setValue()를 전달하는 자바 개체를 자동으로 변환하고 DataSnapshot.getValue()를 사용하여 자바 개체로 JSON을 입력할 수 있습니다.

새 SDK에서는 DataSnapshot.getValue()를 사용하여 자바 개체로 JSON을 입력할 때 이제 JSON의 알 수 없는 개체는 기본적으로 무시되므로 @JsonIgnoreExtraProperties(ignoreUnknown=true)가 필요하지 않습니다.

JSON에 자바 개체를 작성할 때 fields/getters를 제외하기 위해 주석에서 @JsonIgnore 대신 @Exclude가 호출됩니다.

이전

@JsonIgnoreExtraProperties(ignoreUnknown=true)
public class ChatMessage {
   public String name;
   public String message;
   @JsonIgnore
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)
이후

public class ChatMessage {
   public String name;
   public String message;
   @Exclude
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)

자바 클래스에 없는 JSON에 추가 속성이 있는 경우 로그 파일에 다음 경고가 표시됩니다.

W/ClassMapper: No setter/field for ignoreThisProperty found on class com.firebase.migrationguide.ChatMessage

클래스에 @IgnoreExtraProperties 주석을 입력하여 이 경고를 제거할 수 있습니다. Firebase 데이터베이스를 2.x SDK에서처럼 작동하게 하고 알 수 없는 속성이 있는 경우 예외가 발생하게 하려면 클래스에 @ThrowOnExtraProperties 주석을 입력할 수 있습니다.

인증 코드 업데이트

이제 FirebaseAuth 클래스에서 Firebase 인증 기능을 사용할 수 있으므로 인증 작업은 Firebase 참조를 통하지 않고 FirebaseAuth 인스턴스에서 수행됩니다.

Gradle 종속 항목 업데이트

인증이 이제 자체 모듈에 있으므로 다음과 같이 build.gradle에 종속 항목을 먼저 추가해야 합니다.

dependencies {
  compile 'com.google.firebase:firebase-auth:15.0.0'
}

가져오기 업데이트

이전

import com.firebase.client.AuthData;
이후

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

익명으로 사용자 로그인

인증 메소드는 이전과 비슷하게 실행하지만 새 이름으로 FirebaseAuth 개체에 메소드로서 존재하며 예를 들어 AuthDataFirebaseUser로 대체됩니다. 다음 예는 2.x API 및 새 API 둘 다에서 익명 로그인이 작동하는 방식입니다.

이전

ref.authAnonymously(new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
이후

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInAnonymously().addOnFailureListener(new OnFailureListener() {
   public void onFailure(Throwable throwable) {
       throw new RuntimeException(throwable);
   }
});

맞춤 토큰으로 사용자 로그인 처리

클라이언트측에서 맞춤 토큰으로 인증하는 방법도 이전과 비슷합니다. 2.x API 및 새 API에서 맞춤 토큰으로 로그인하는 방법은 다음과 같습니다.

이전

ref.authWithCustomToken(AUTH_TOKEN, new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
이후

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInWithCustomToken(AUTH_TOKEN)
        .addOnCompleteListener(this, new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
            }
        });

서버에서 생성하는 맞춤 토큰에 새로운 형식이 사용됩니다. Node.js 및 자바용 Firebase Admin SDK를 사용하여 새 API와 호환되는 맞춤 토큰을 생성하거나 타사 JWT 라이브러리를 사용하여 맞춤 토큰을 생성할 수 있습니다.

2.x API의 헬퍼 라이브러리가 생성하는 토큰은 기본적으로 24시간 후에 만료되지만 Firebase Admin SDK가 생성하는 맞춤 토큰은 1시간 후에 만료됩니다.

소셜 제공업체를 사용하여 사용자 로그인

Google, Facebook 또는 Twitter 등의 소셜 제공업체의 경우 변경사항이 좀 더 많습니다.

소셜 제공업체에 대한 흐름은 이전과 같습니다. 제공업체에서 사용자 인증 정보를 먼저 받은 후, 이 정보를 사용하여 Firebase로 인증합니다.

이전

ref.authWithOAuthToken(provider, token, authResultHandler);
이후

AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)

자세한 내용은 Firebase로 Facebook 인증 사용Firebase로 Google 인증 사용에 대한 문서를 참조하세요.

Twitter 인증은 다음과 같이 또 약간 다릅니다.

이전

Map options = new HashMap<>();
options.put("oauth_token", oauth_token);
options.put("oauth_token_secret", oauth_token_secret);
options.put("user_id", user_id);
ref.authWithOAuthToken(token.provider, options, authResultHandler);
이후

AuthCredential credential = TwitterAuthProvider.getCredential(token, secret);
mAuth.signInWithCredential(credential)

자세한 내용은 Twitter를 사용하여 인증을 참조하세요.

사용자 로그아웃

이전

ref.unauth()
이후

FirebaseAuth.getInstance().signOut();

인증 상태 모니터링

이전

ref.addAuthStateListener(new Firebase.AuthStateListener() {
   @Override
   public void onAuthStateChanged(final AuthData authData) {
       if (authData != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + authData.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});
이후

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
   @Override
   public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
       final FirebaseUser user = firebaseAuth.getCurrentUser();
       if (user != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});

기존 로그인 이전

사용자가 이전 SDK로 앱에 로그인한 경우 새 SDK로 로그인 상태를 유지하려면 약간의 코드를 작성해야 합니다. 그렇지 않으면 사용자가 다시 로그인해야 합니다. 이를 수행하는 오픈소스 샘플 코드는 Firebase Auth Migration Helpers GitHub 저장소를 참조하세요.

새 비밀번호 재설정 템플릿 업데이트

앱에서 사용자가 이메일 및 비밀번호 인증으로 로그인하도록 허용하는 경우 사용자에게 비밀번호를 재설정하는 옵션도 제공해야 합니다.

새 SDK로 업그레이드하고 나면 사용자 비밀번호 재설정 이메일은 Firebase 콘솔에 지정된 새 템플릿을 사용합니다. 앱의 필요에 맞게 템플릿을 업데이트해야 합니다.

Firebase 라이브러리 업데이트

다음 라이브러리를 사용하는 경우 최신 버전으로 업그레이드해야 합니다.

라이브러리 지원되는 버전 리소스
GeoFire 1.2.x GitHub

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.