Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

이메일 작업 링크 생성

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

모바일 앱은 때때로 사용자와 상호 작용하고 이메일을 보내 특정 조치를 취하도록 프롬프트를 표시해야 합니다.

Firebase 클라이언트 SDK 는 비밀번호 재설정, 이메일 주소 확인, 이메일 기반 로그인에 사용할 수 있는 링크가 포함된 이메일을 사용자에게 보낼 수 있는 기능을 제공합니다. 이러한 템플릿 기반 이메일은 Google에서 전송하며 사용자 정의가 제한됩니다.

자체 이메일 템플릿과 자체 이메일 전송 서비스를 대신 사용하려는 경우 이 페이지에서는 Firebase Admin SDK 를 사용하여 사용자에게 보내는 이메일에 포함할 수 있는 위의 흐름에 대한 작업 링크를 프로그래밍 방식으로 생성하는 방법을 설명합니다.

다음과 같은 이점이 있습니다.

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

ActionCodeSettings 초기화

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

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

모바일 앱을 통해 열리는 링크의 경우 Firebase 동적 링크를 활성화하고 모바일 앱에서 이러한 링크를 감지하는 몇 가지 작업을 수행해야 합니다. 이메일 작업에 대해 Firebase 동적 링크를 구성 하는 방법에 대한 지침을 참조하세요.

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

매개변수 유형 설명
url

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

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

다음 예에서는 모바일 앱에서 먼저 열릴 이메일 확인 링크를 Firebase 동적 링크(Apple 앱 com.example.ios 또는 Android 앱 com.example.android 가 아직 설치되지 않은 경우 설치할 위치 및 최소 버전은 12)입니다. 딥 링크에는 계속 URL 페이로드 https://www.example.com/checkout?cartId=1234 가 포함됩니다. 사용된 동적 링크 도메인은 Firebase 동적 링크와 함께 사용하도록 구성해야 하는 coolapp.page.link 입니다.

노드.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();

파이썬

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 := &auth.ActionCodeSettings{
	URL:                   "https://www.example.com/checkout?cartId=1234",
	HandleCodeInApp:       true,
	IOSBundleID:           "com.example.ios",
	AndroidPackageName:    "com.example.android",
	AndroidInstallApp:     true,
	AndroidMinimumVersion: "12",
	DynamicLinkDomain:     "coolapp.page.link",
}

씨#

var actionCodeSettings = new ActionCodeSettings()
{
    Url = "https://www.example.com/checkout?cartId=1234",
    HandleCodeInApp = true,
    IosBundleId = "com.example.ios",
    AndroidPackageName = "com.example.android",
    AndroidInstallApp = true,
    AndroidMinimumVersion = "12",
    DynamicLinkDomain = "coolapp.page.link",
};

자세한 내용 은 이메일 작업에서 상태 전달 을 참조하십시오.

비밀번호 재설정 링크를 생성하려면 기존 사용자의 이메일과 선택적 ActionCodeSettings 객체를 제공하십시오. 작업은 이메일 작업 링크로 해결됩니다. 사용된 이메일은 기존 사용자의 것이어야 합니다.

노드.js

// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
getAuth()
  .generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(userEmail, 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.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

파이썬

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)

가다

email := "user@example.com"
link, err := client.PasswordResetLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct password reset template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

씨#

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GeneratePasswordResetLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

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

기본 비밀번호 재설정 랜딩 페이지를 사용하지 않고 고유한 사용자 지정 핸들러를 구축하는 경우 사용자 지정 이메일 작업 핸들러 만들기 를 참조하세요.

이메일 확인 링크를 생성하려면 기존 사용자의 확인되지 않은 이메일과 선택적 ActionCodeSettings 객체를 제공하세요. 작업은 이메일 작업 링크로 해결됩니다. 사용된 이메일은 기존 사용자의 것이어야 합니다.

노드.js

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
getAuth()
  .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.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

파이썬

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)

가다

email := "user@example.com"
link, err := client.EmailVerificationLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

씨#

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateEmailVerificationLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

링크가 생성된 후 사용자 지정 확인 이메일에 삽입한 다음 사용자 지정 SMTP 서버를 사용하여 해당 사용자에게 전자 메일로 보낼 수 있습니다.

기본 이메일 확인 랜딩 페이지를 사용하지 않고 고유한 사용자 정의 핸들러를 구축하는 경우 사용자 정의 이메일 작업 핸들러 생성 을 참조하십시오.

이메일 링크 로그인으로 사용자를 인증하려면 먼저 Firebase 프로젝트 에 이메일 링크 로그인을 활성화 해야 합니다.

로그인 링크를 생성하려면 사용자의 이메일과 ActionCodeSettings 객체를 제공하세요. 이 경우 ActionCodeSettings 개체는 로그인 완료를 위해 링크를 클릭한 후 사용자를 반환할 위치에 대한 정보를 제공하는 데 필요합니다. 작업은 이메일 작업 링크로 해결됩니다.

비밀번호 재설정 및 이메일 확인과 달리 사용된 이메일은 반드시 기존 사용자의 것일 필요는 없습니다. 이 작업을 통해 이메일 링크를 통해 앱에 신규 사용자를 등록할 수 있기 때문입니다.

노드.js

// Admin SDK API to generate the sign in with email link.
const useremail = 'user@example.com';
getAuth()
  .generateSignInWithEmailLink(useremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(useremail, 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.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

파이썬

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)

가다

email := "user@example.com"
link, err := client.EmailSignInLink(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct sign-in with email link template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

씨#

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateSignInWithEmailLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

링크가 생성된 후 사용자 지정 로그인 이메일에 삽입한 다음 사용자 지정 SMTP 서버를 사용하여 해당 사용자에게 전자 메일로 보낼 수 있습니다.

이메일 링크를 사용하여 Firebase로 사용자를 인증하는 방법에 대해 자세히 알아보세요. 이렇게 하면 사용자가 링크를 클릭하고 앱으로 다시 리디렉션된 후 로그인을 완료하는 방법에 대한 정보를 제공하는 데 도움이 됩니다.