Android에서 커스텀 제공자로 앱 체크 사용 시작하기

이 페이지에서는 Android 앱에서 App Check 맞춤 App Check 제공자 App Check를 사용 설정하면 내 앱만 프로젝트의 Firebase 리소스에 액세스할 수 있습니다.

기본 Play Integrity 제공업체와 함께 App Check를 사용하려면 다음을 참고하세요. Android에서 Play Integrity로 App Check를 사용 설정합니다.

시작하기 전에

1. 앱에 App Check 라이브러리 추가

모듈 (앱 수준) Gradle 파일에서 (일반적으로 <project>/<app-module>/build.gradle.kts 또는 <project>/<app-module>/build.gradle), Android용 App Check 라이브러리의 종속 항목을 추가합니다. 이때 Firebase Android BoM 드림 라이브러리 버전 관리를 제어할 수 있습니다.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:33.2.0"))

    // Add the dependency for the App Check library
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-appcheck")
}

Firebase Android BoM를 사용하면 앱은 항상 호환되는 Firebase Android 라이브러리 버전만 사용합니다.

(대안) BoM를 사용하지 않고 Firebase 라이브러리 종속 항목을 추가합니다.

Firebase BoM를 사용하지 않도록 선택하는 경우 각 Firebase 라이브러리 버전을 지정해야 합니다. 를 사용해야 합니다.

앱에서 여러 Firebase 라이브러리를 사용하는 경우 BoM를 사용하여 라이브러리 버전을 관리하는 것이 좋습니다. 이렇게 하면 모든 버전이 지원합니다.

dependencies {
    // Add the dependency for the App Check library
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-appcheck:18.0.0")
}
드림
Kotlin 전용 라이브러리 모듈을 찾고 계신가요? 시작까지 남은 시간: 2023년 10월 (Firebase BoM 32.5.0), Kotlin 및 Java 개발자 모두 기본 라이브러리 모듈에 종속됩니다. 자세한 내용은 이 이니셔티브에 관한 FAQ).

2. App Check 인터페이스 구현

먼저 AppCheckProviderAppCheckProviderFactory 인터페이스를 구현하는 클래스를 만들어야 합니다.

AppCheckProvider 클래스에는 다음을 수집하는 getToken() 메서드가 있어야 합니다. 맞춤 App Check 제공업체에서 증빙 자료로 요구하는 모든 정보 인증하고 인증 토큰을 얻는 대가로 토큰 획득 서비스로 전송합니다. App Check 토큰입니다. App Check SDK는 토큰 캐싱을 처리하므로 항상 getToken()의 구현에서 새 토큰을 생성합니다.

Kotlin+KTX

class YourCustomAppCheckToken(
    private val token: String,
    private val expiration: Long,
) : AppCheckToken() {
    override fun getToken(): String = token
    override fun getExpireTimeMillis(): Long = expiration
}

class YourCustomAppCheckProvider(firebaseApp: FirebaseApp) : AppCheckProvider {
    override fun getToken(): Task<AppCheckToken> {
        // Logic to exchange proof of authenticity for an App Check token and
        //   expiration time.
        // ...

        // Refresh the token early to handle clock skew.
        val expMillis = expirationFromServer * 1000L - 60000L

        // Create AppCheckToken object.
        val appCheckToken: AppCheckToken = YourCustomAppCheckToken(tokenFromServer, expMillis)
        return Tasks.forResult(appCheckToken)
    }
}

Java

public class YourCustomAppCheckToken extends AppCheckToken {
    private String token;
    private long expiration;

    YourCustomAppCheckToken(String token, long expiration) {
        this.token = token;
        this.expiration = expiration;
    }

    @NonNull
    @Override
    public String getToken() {
        return token;
    }

    @Override
    public long getExpireTimeMillis() {
        return expiration;
    }
}

public class YourCustomAppCheckProvider implements AppCheckProvider {
    public YourCustomAppCheckProvider(FirebaseApp firebaseApp) {
        // ...
    }

    @NonNull
    @Override
    public Task<AppCheckToken> getToken() {
        // Logic to exchange proof of authenticity for an App Check token and
        //   expiration time.
        // ...

        // Refresh the token early to handle clock skew.
        long expMillis = expirationFromServer * 1000L - 60000L;

        // Create AppCheckToken object.
        AppCheckToken appCheckToken =
                new YourCustomAppCheckToken(tokenFromServer, expMillis);

        return Tasks.forResult(appCheckToken);
    }
}

또한 AppCheckProvider 구현의 인스턴스를 만드는 AppCheckProviderFactory 클래스를 구현합니다.

Kotlin+KTX

class YourCustomAppCheckProviderFactory : AppCheckProviderFactory {
    override fun create(firebaseApp: FirebaseApp): AppCheckProvider {
        // Create and return an AppCheckProvider object.
        return YourCustomAppCheckProvider(firebaseApp)
    }
}

Java

public class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory {
    @NonNull
    @Override
    public AppCheckProvider create(@NonNull FirebaseApp firebaseApp) {
        // Create and return an AppCheckProvider object.
        return new YourCustomAppCheckProvider(firebaseApp);
    }
}

3. App Check 초기화

다른 Firebase SDK를 사용하기 전에 초기화 코드가 실행되도록 다음 초기화 코드를 앱에 추가합니다.

Kotlin+KTX

Firebase.initialize(context)
Firebase.appCheck.installAppCheckProviderFactory(
    YourCustomAppCheckProviderFactory(),
)

Java

FirebaseApp.initializeApp(/*context=*/ context);
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
        new YourCustomAppCheckProviderFactory());

다음 단계

앱에 App Check 라이브러리가 설치되면 사용자에게 제공할 수 있습니다.

업데이트된 클라이언트 앱이 모든 토큰과 함께 App Check개의 토큰을 전송합니다. 요청을 수행할 때 사용할 수 있지만 Firebase 제품은 토큰이 필요하지 않음 App Check 섹션에서 적용을 사용 설정할 때까지 유효합니다. Firebase Console

측정항목 모니터링 및 적용 사용 설정

적용을 사용 설정하기 전에 먼저 이렇게 해도 기존의 정당한 사용자에게 불편을 야기하지 않는지 확인해야 합니다. 반면에 앱 리소스 사용이 의심스러워 보이면 적용을 더 빠르게 사용 설정하는 것이 좋습니다.

App Check 측정항목을 살펴보면 이러한 결정을 내리는 데 도움이 됩니다. 사용하는 서비스의 예는 다음과 같습니다.

App Check 적용 사용 설정

App Check이(가) 사용자에게 미치는 영향을 이해하고 다음과 같이 할 준비가 되면 계속 진행하면 App Check 적용을 사용 설정할 수 있습니다.

디버그 환경에서 App Check 사용

App Check에 앱을 등록한 후 App Check가 일반적으로 유효한 것으로 분류하지 않는 환경의 앱 (예: 개발 중 에뮬레이터, 지속적 통합(CI)) gcloud 명령어를 사용하여 앱의 디버그 빌드를 실제 증명 제공자가 아닌 App Check 디버그 제공자입니다.

Android에서 디버그 제공자와 함께 App Check 사용을 참고하세요.