콘솔로 이동

이메일 작업 링크 생성

모바일 앱에서는 이메일을 보내 사용자와 상호작용하고 특정 작업을 하라는 알림을 제공해야 하는 경우가 있습니다.

Firebase 클라이언트 SDK를 사용하면 비밀번호 재설정, 이메일 주소 인증, 이메일 기반 로그인에 사용할 수 있는 링크가 포함된 이메일을 사용자에게 보낼 수 있습니다. 이러한 이메일은 Google에서 보내며 맞춤설정이 제한적입니다.

자체 이메일 템플릿과 이메일 전송 서비스를 이용하려면 Firebase Admin SDK를 사용하여 위의 흐름에 대한 작업 링크를 프로그래매틱 방식으로 생성하고 사용자에게 보내는 이메일에 이 링크를 포함하면 됩니다.

그 외에 다음 기능도 함께 이용할 수 있습니다.

  • 이메일 템플릿 맞춤설정: 새 스타일과 맞춤 브랜딩을 추가하고 문구와 로고를 변경하고, 전체 이름 대신 이름으로 사용자에게 이메일을 보내는 기능 등이 포함됩니다.
  • 컨텍스트별로 템플릿 적용: 예를 들어 사용자가 뉴스레터를 구독하기 위해 이메일을 인증하는 경우 이메일 내용에 컨텍스트를 제공해야 할 수 있습니다. 또 다른 예로는 이메일 링크 로그인이 있습니다. 상황에 따라 이메일 링크 로그인을 같은 사용자가 트리거할 수도 있고 다른 사용자의 초대를 받은 사용자가 트리거할 수도 있으므로 컨텍스트를 이메일에 포함해야 합니다.
  • 맞춤설정된 이메일 템플릿 현지화
  • 안전한 서버 환경에서 링크를 생성하는 기능
  • 모바일 앱 또는 브라우저를 통해 링크를 여는 방법과 추가 상태 정보를 전달하는 방법 등을 맞춤설정하는 기능
  • 이메일 작업 링크를 구성할 때 모바일 앱 흐름에 사용되는 동적 링크 도메인을 맞춤설정하고 컨텍스트 또는 모바일 앱에 따라 다른 동적 링크 도메인도 지정할 수 있는 기능

ActionCodeSettings 초기화

이메일 작업 링크를 생성하려면 ActionCodeSettings 인스턴스를 초기화해야 할 수도 있습니다.

ActionCodeSettings를 사용하면 사용자가 이메일 링크를 클릭한 후 액세스할 수 있는 연결 URL을 통해 추가 상태를 전달할 수 있습니다. 그러면 작업이 완료된 후 사용자가 앱으로 돌아갈 수 있습니다. 또한 모바일 애플리케이션이 설치된 경우 이메일 작업 링크를 모바일 애플리케이션에서 직접 처리할지 또는 브라우저에서 처리할지 지정할 수 있습니다.

모바일 앱을 통해 열어야 하는 링크의 경우 Firebase 동적 링크를 사용 설정하고 모바일 앱에서 이러한 링크를 감지하도록 몇 가지 작업을 수행해야 합니다. 이메일 작업에 Firebase 동적 링크를 구성하는 방법에 대한 안내를 참조하세요.

ActionCodeSettings 인스턴스를 초기화하려면 다음 데이터를 제공합니다.

매개변수 유형 설명
url 문자열

컨텍스트에 따라 의미가 다른 링크(상태/연결 URL)를 설정합니다.

  • 웹 작업 위젯에서 링크가 처리되는 경우 continueUrl 쿼리 매개변수의 딥 링크입니다.
  • 앱에서 링크가 직접 처리되는 경우 동적 링크의 딥 링크에 있는 continueUrl 쿼리 매개변수입니다.
iOS ({bundleId: string}|undefined) iOS 번들 ID를 설정합니다. iOS 앱이 설치되어 있다면 앱에서 링크를 열려고 시도할 것입니다. iOS 앱을 콘솔에 등록해야 합니다.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Android 패키지 이름을 설정합니다. Android 앱이 설치되어 있다면 앱의 링크를 열려고 시도할 것입니다. installApp이 전달되었을 때 기기에서 앱을 지원하며 아직 설치하지 않았다면 Android 앱 설치 여부를 지정합니다. 이 필드가 packageName 없이 제공되면 packageName을 필드와 함께 제공해야 한다고 설명하는 오류가 발생합니다. minimumVersion이 지정되고 설치된 앱이 이전 버전이라면 앱을 업그레이드하기 위해 Play 스토어로 이동합니다. Android 앱을 콘솔에 등록해야 합니다.
handleCodeInApp (boolean|undefined) 이메일 작업 링크를 모바일 앱과 웹 링크 중 어디에서 먼저 열지 지정합니다. 기본값은 false입니다. true로 설정하면 작업 코드 링크가 범용 링크 또는 Android 앱 링크로 전송되고 앱이 설치된 경우 앱에서 열립니다. false이면 코드가 먼 웹 위젯에 전송되고 앱이 설치된 경우 계속해서 앱으로 리디렉션됩니다.
dynamicLinkDomain (string|undefined) Firebase 동적 링크를 사용하여 열려는 경우 현재 링크에 사용할 동적 링크 도메인 또는 하위 도메인을 설정합니다. 프로젝트마다 여러 동적 링크 도메인을 구성할 수 있으므로 이 필드는 명시적으로 하나를 선택할 수 있는 기능을 제공합니다. 도메인을 지정하지 않으면 기본적으로 가장 오래된 도메인이 사용됩니다.

다음 예에서는 먼저 모바일 앱에서 열리는 이메일 확인 링크를 Firebase 동적 링크로 보내는 방법을 보여줍니다(앱이 아직 설치되지 않은 상태이고 최소 버전이 12인 경우 앱이 설치되는 iOS 앱 com.example.ios 또는 Android 앱 com.example.android). 딥 링크에는 연결 URL 페이로드 https://www.example.com/checkout?cartId=1234가 포함됩니다. 사용되는 동적 링크 도메인은 coolapp.page.link이며 Firebase 동적 링크와 함께 사용하도록 구성되어야 합니다.

Node.js

const actionCodeSettings = {
  // URL you want to redirect back to. The domain (www.example.com) for
  // this URL must be whitelisted in the Firebase Console.
  url: 'https://www.example.com/checkout?cartId=1234',
  // This must be true for email link sign-in.
  handleCodeInApp: true,
  iOS: {
    bundleId: 'com.example.ios'
  },
  android: {
    packageName: 'com.example.android',
    installApp: true,
    minimumVersion: '12'
  },
  // FDL custom domain.
  dynamicLinkDomain: 'coolapp.page.link'
};

자바

ActionCodeSettings actionCodeSettings = ActionCodeSettings.builder()
    .setUrl("https://www.example.com/checkout?cartId=1234")
    .setHandleCodeInApp(true)
    .setIosBundleId("com.example.ios")
    .setAndroidPackageName("com.example.android")
    .setAndroidInstallApp(true)
    .setAndroidMinimumVersion("12")
    .setDynamicLinkDomain("coolapp.page.link")
    .build();

Python

action_code_settings = auth.ActionCodeSettings(
    url='https://www.example.com/checkout?cartId=1234',
    handle_code_in_app=True,
    ios_bundle_id='com.example.ios',
    android_package_name='com.example.android',
    android_install_app=True,
    android_minimum_version='12',
    dynamic_link_domain='coolapp.page.link',
)

자세한 내용은 이메일 작업의 상태 전달을 참조하세요.

비밀번호 재설정 링크를 생성하려면 기존 사용자의 이메일과 선택사항인 ActionCodeSettings 객체를 제공하세요. 이 작업은 이메일 작업 링크를 사용하여 처리됩니다. 사용되는 이메일은 기존 사용자의 이메일이어야 합니다.

Node.js

// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
admin.auth().generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

자바

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generatePasswordResetLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomPasswordResetEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Python

email = 'user@example.com'
link = auth.generate_password_reset_link(email, action_code_settings)
# Construct password reset email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

링크가 생성되면 링크를 맞춤 비밀번호 재설정 이메일에 삽입한 다음 맞춤 SMTP 서버를 사용하여 해당 사용자에게 이메일을 보낼 수 있습니다.

기본 비밀번호 재설정 방문 페이지를 사용하지 않고 자체 맞춤 핸들러를 만드는 경우 맞춤 이메일 작업 핸들러 만들기를 참조하세요.

이메일 확인 링크를 생성하려면 기존 사용자의 확인되지 않은 이메일과 선택사항인 ActionCodeSettings 객체를 제공합니다. 이 작업은 이메일 작업 링크를 사용하여 처리됩니다. 사용되는 이메일은 기존 사용자의 이메일이어야 합니다.

Node.js

// Admin SDK API to generate the password reset link.
const email = 'user@example.com';
admin.auth().generatePasswordResetLink(email, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
admin.auth().generateEmailVerificationLink(useremail, actionCodeSettings)
  .then((link) => {
    // Construct email verification template, embed the link and send
    // using custom SMTP server.
    return sendCustomVerificationEmail(useremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

자바

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generateEmailVerificationLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomPasswordResetEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Python

email = 'user@example.com'
link = auth.generate_email_verification_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

링크가 생성되면 링크를 맞춤 확인 이메일에 삽입한 다음 맞춤 SMTP 서버를 사용하여 해당 사용자에게 이메일을 보낼 수 있습니다.

기본 이메일 확인 방문 페이지를 사용하지 않고 자체 맞춤 핸들러를 만드는 경우 맞춤 이메일 작업 핸들러 만들기를 참조하세요.

이메일 링크 로그인으로 사용자를 인증하려면 Firebase 프로젝트에서 이메일 링크 로그인을 사용 설정해야 합니다.

로그인 링크를 생성하려면 사용자의 이메일과 ActionCodeSettings 객체를 제공합니다. 이 경우에 ActionCodeSettings 객체는 로그인을 완료하기 위해 링크를 클릭한 후 사용자가 확인할 위치에 대한 정보를 제공하기 위해 필요합니다. 이 작업은 이메일 작업 링크를 사용하여 처리됩니다.

여기에 사용된 이메일은 비밀번호 재설정 및 이메일 확인과 달리 기존 사용자의 이메일이 아니어도 됩니다. 이메일 링크를 통해 새 사용자를 앱에 등록하는 데 이 작업을 사용할 수 있기 때문입니다.

Node.js

// Admin SDK API to generate the sign in with email link.
const usremail = 'user@example.com';
admin.auth().generateSignInWithEmailLink(usremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(usremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

자바

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generateSignInWithEmailLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomPasswordResetEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Python

email = 'user@example.com'
link = auth.generate_sign_in_with_email_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

링크가 생성되면 링크를 맞춤 로그인 이메일에 삽입한 다음 맞춤 SMTP 서버를 사용하여 해당 사용자에게 이메일을 보낼 수 있습니다.

이메일 링크를 사용하여 Firebase로 사용자 인증에 대해 자세히 알아보세요. 사용자가 링크를 클릭하고 다시 앱으로 리디렉션된 후 로그인을 완료하는 방법에 대한 정보를 얻을 수 있습니다.