비밀번호 재설정이나 사용자 이메일 인증을 위한 이메일 작업을 보낼 때 연결 URL을 통해 상태를 전달할 수 있습니다. 그러면 작업이 완료된 후 사용자가 앱으로 돌아갈 수 있습니다. 또한 모바일 애플리케이션이 설치된 경우 이메일 작업 링크를 웹페이지 대신 모바일 애플리케이션에서 직접 처리할지 여부를 지정할 수도 있습니다
이 기능은 다음과 같은 시나리오에서 매우 유용합니다.
현재 로그인하지 않은 사용자가 로그인이 필요한 콘텐츠에 액세스하려고 시도합니다. 하지만 사용자가 비밀번호를 잊어버려 비밀번호 재설정 흐름을 트리거합니다. 이 흐름이 완료되면 사용자는 액세스하려고 했던 앱 섹션으로 돌아가기를 기대합니다.
애플리케이션에서는 인증된 계정에만 액세스를 제공합니다. 예를 들어 뉴스레터를 구독하려면 먼저 사용자의 이메일 인증이 필요합니다. 사용자는 이메일 인증 흐름을 거친 다음 앱으로 돌아가 구독을 완료할 수 있기를 기대합니다.
사용자가 휴대기기에서 흐름을 시작해 인증 후 브라우저가 아닌 모바일 앱으로 돌아가기를 기대합니다.
연결 URL을 통한 상태 전달은 Firebase 인증이 제공하는 강력한 기능으로 사용자 환경을 크게 개선할 수 있습니다.
이메일 작업에서 연결 URL의 상태 전달
연결 URL을 안전하게 전달하려면 Firebase Console에서 이 URL의 도메인을 허용해야 합니다. 아직 허용 목록에 포함되어 있지 않다면 인증 섹션에서 로그인 방법 탭의 승인된 도메인 목록에 도메인을 추가하면 됩니다.
비밀번호 재설정 이메일이나 인증 메일을 보낼 때 ActionCodeSettings 인스턴스를 제공해야 합니다. 인스턴스는 연결된 ActionCodeSettings.Builder 클래스로 만들 수 있으며 이 클래스는 다음 메서드를 포함합니다.
메서드 | 설명 |
---|---|
setUrl(String url) |
컨텍스트에 따라 의미가 다른 링크(상태/연결 URL)를 설정합니다.
|
setIOSBundleId(String iOSBundleId) |
Firebase Authentication이 Apple 기기에서 열리는 웹 전용 링크 또는 모바일 링크를 만들어야 하는지 결정하는 데 도움이 됩니다. |
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) |
Firebase Authentication이 Android 기기에서 열리는 웹 전용 링크 또는 모바일 링크를 만들어야 하는지 결정하는 데 도움이 됩니다. |
setHandleCodeInApp(boolean status) |
이메일 작업 링크를 모바일 앱과 웹 링크 중 어디에서 먼저 열지 지정합니다. 기본값은 false입니다. true로 설정하면 작업 코드 링크가 범용 링크 또는 Android 앱 링크로 전송되고 앱이 설치된 경우 앱에서 열립니다. false면 코드가 먼저 웹 위젯에 전송되고 앱이 설치된 경우 계속해서 앱으로 리디렉션됩니다. |
setLinkDomain(String customDomain) |
프로젝트에 대해 커스텀 Hosting 링크 도메인이 정의된 경우 지정된 모바일 앱에서 링크를 열 때 사용할 도메인을 지정합니다. 그러지 않으면 기본 도메인이 자동으로 선택됩니다(예: PROJECT_ID.firebaseapp.com |
setDynamicLinkDomain(String dynamicLinkDomain) |
지원 중단되었습니다. 이 파라미터를 지정하지 마세요. |
다음 예시에서는 모바일 앱에서 먼저 열리는 이메일 인증 링크를 보내는 방법을 보여줍니다. 딥 링크에는 연결 URL 페이로드(http://www.example.com/verify?uid=1234
)가 포함됩니다.
Kotlin
val auth = Firebase.auth val user = auth.currentUser!! val url = "http://www.example.com/verify?uid=" + user.uid val actionCodeSettings = ActionCodeSettings.newBuilder() .setUrl(url) .setIOSBundleId("com.example.ios") // The default for this is populated with the current android package name. .setAndroidPackageName("com.example.android", false, null) .build() user.sendEmailVerification(actionCodeSettings) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); FirebaseUser user = auth.getCurrentUser(); String url = "http://www.example.com/verify?uid=" + user.getUid(); ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() .setUrl(url) .setIOSBundleId("com.example.ios") // The default for this is populated with the current android package name. .setAndroidPackageName("com.example.android", false, null) .build(); user.sendEmailVerification(actionCodeSettings) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); } } });
Firebase 호스팅 링크 구성
Firebase Authentication은 모바일 애플리케이션에서 열릴 링크를 보낼 때 Firebase Hosting을 사용합니다. 이 기능을 사용하려면 Firebase Console에서 호스팅 링크를 구성해야 합니다.
Android 애플리케이션을 구성합니다.
- Android 애플리케이션에서 이 링크를 처리하려면 Firebase Console 프로젝트 설정에서 앱의 패키지 이름을 지정해야 합니다. 또한 애플리케이션 인증서의 SHA-1 및 SHA-256을 제공해야 합니다.
- 또한
AndroidManifest.xml
파일의 딥 링크에 대한 인텐트 필터도 구성해야 합니다. - 자세한 내용은 Android 동적 링크 수신 안내를 참조하세요.
iOS 애플리케이션을 구성합니다.
- iOS 애플리케이션에서 이러한 링크를 처리하려면 애플리케이션 기능에서 Hosting 링크 도메인을 연결된 도메인으로 구성해야 합니다.
- 자세한 내용은 iOS 호스팅 링크 수신 안내를 참조하세요.
웹 애플리케이션의 이메일 작업 처리
먼저 웹 애플리케이션에서 작업 코드 링크를 처리하고 정상적으로 완료된 후 다른 웹페이지로 리디렉션할지 또는 모바일 애플리케이션(모바일 애플리케이션을 사용하는 경우)으로 리디렉션할지 여부를 지정할 수 있습니다.
setHandleCodeInApp(false)
을 ActionCodeSettings.Builder 객체에서 호출하면 됩니다. iOS 번들 ID 또는 Android 패키지 이름은 필수 항목이 아니지만 제공할 경우 이메일 작업 코드 완료 시 사용자가 지정된 앱으로 다시 리디렉션될 수 있습니다.
여기에 사용된 웹 URL은 이메일 작업 템플릿 섹션에서 구성된 URL입니다. 모든 프로젝트에 기본 URL이 프로비저닝됩니다. 이메일 작업 핸들러의 맞춤설정에 대한 자세한 내용은 이메일 핸들러 맞춤설정을 참조하세요.
이 경우 continueUrl
쿼리 파라미터의 링크는 페이로드가 ActionCodeSettings
객체에 지정된 URL
인 Hosting 링크가 됩니다.
이메일 인증과 같은 이메일 작업을 처리할 때는 oobCode
쿼리 매개변수의 작업 코드를 딥 링크에서 파싱한 다음 applyActionCode
를 통해 변경사항이 적용되도록 합니다(즉, 이메일 인증).
모바일 애플리케이션에서 이메일 작업 처리
모바일 애플리케이션이 설치된 경우 먼저 모바일 애플리케이션의 작업 코드 링크를 처리할지
여부를 지정할 수 있습니다. 모바일 애플리케이션을 지원하지 않는 기기에서 링크를 클릭하면 대신 웹페이지에서 링크가 열립니다. setHandleCodeInApp(true)
을 ActionCodeSettings.Builder 객체에서 호출하면 됩니다. 모바일 애플리케이션의 Android 패키지 이름 또는 iOS 번들 ID도 지정해야 합니다.
사용할 수 있는 모바일 앱이 없을 때 여기에 사용된 대체 웹 URL은 이메일 작업 템플릿 섹션에서 구성된 URL입니다. 모든 프로젝트에 기본 URL이 프로비저닝됩니다. 이메일 작업 핸들러의 맞춤설정에 대한 자세한 내용은 이메일 핸들러 맞춤설정을 참조하세요.
이 경우 사용자에게 전송되는 모바일 앱 링크는 페이로드가 Console에서 쿼리 파라미터 oobCode
, mode
, apiKey
, continueUrl
을 사용해 구성된 작업 코드 URL인 Hosting 링크입니다. 후자는 ActionCodeSettings
객체에 지정된 원래의 URL
입니다. 이메일 핸들러 맞춤설정 섹션에 설명된 웹 흐름에서 처리하는 방식과 유사한 방법으로 모바일 애플리케이션에서 작업 코드를 직접 적용할 수 있습니다.
이메일 인증과 같은 이메일 작업을 처리할 때는 oobCode
쿼리 매개변수의 작업 코드를 딥 링크에서 파싱한 다음 applyActionCode
를 통해 변경사항이 적용되도록 합니다(즉, 이메일 인증).