2021년 10월 5일부터 Facebook 로그인은 사용자 인증에 더 이상 Android 임베디드 브라우저(웹 보기)를 지원하지 않습니다.

이 사용 중단에 대한 배경 정보는 Android 임베디드 브라우저에서 FB 로그인 인증 지원 중단 블로그 게시물을 참조하세요.

웹 보기 사용을 중단하는 대신 맞춤 설정 탭을 사용하는 것과 관련된 내용은 Android 웹 보기 사용 중단을 참조하세요.

Android용 Facebook 로그인 - 빠른 시작

Android용 Facebook SDK를 사용하면 Facebook 로그인을 통해 Android 앱에 로그인할 수 있습니다. Facebook 계정으로 앱에 로그인하면 사용자는 개발자가 Facebook에서 본인 대신 정보를 가져오거나 작업을 수행하도록 앱에 권한을 부여할 수 있습니다.

Facebook 로그인을 Android 앱에 통합하는 방법으로 보여주는 프로젝트의 예는 GitHubFBLoginSample을 참조하세요.

아래 단계에 따라 Facebook 로그인을 앱에 추가하세요.

1. 로그인

Facebook에 로그인하여 앱을 만들거나 개발자로 등록하세요.

2. Facebook 앱 다운로드

아래 버튼을 클릭하여 Facebook 앱을 다운로드합니다.

3. Facebook SDK 통합

Android용 Facebook 로그인 SDK는 Android용 Facebook SDK의 구성 요소입니다. 프로젝트에서 Facebook 로그인 SDK를 사용하려면 Maven에 종속되도록 만들거나 다운로드하세요. Android 11에서 변경 사항을 지원하려면 SDK 버전 8.1 이상을 사용하세요.

Maven 사용하기

  1. 프로젝트에서 your_app > Gradle Scripts(그래들 스크립트) > build.gradle (Project)를 연 후 buildscript { repositories {}}에 다음 저장소가 나열되어 있는지 확인합니다.
    mavenCentral() 
    
  2. 프로젝트에서 your_app > Gradle Scripts(그래들 스크립트) > build.gradle (Module: app)을 연 후 dependencies{} 섹션에 다음 구현 문을 추가하여 최신 버전의 Facebook 로그인 SDK를 사용합니다.
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. 프로젝트를 빌드합니다.

4. 리소스 및 메니페스트 수정

Android용 Facebook SDK 버전 5.15 이상을 사용하는 경우 Chrome 맞춤 탭에 활동 또는 인텐트 필터를 추가할 필요가 없습니다. 이 기능은 SDK에 포함되어 있습니다.

Facebook 로그인을 통합하고 나서 특정 앱 이벤트가 이벤트 관리자에 대해 자동으로 로깅 및 수집됩니다. 단, 자동 앱 이벤트 로깅을 비활성화한 경우는 예외입니다. 수집되는 정보 및 자동 앱 이벤트 로깅을 비활성화하는 방법에 대한 자세한 내용은 자동 앱 이벤트 로깅을 참조하세요.

사용자의 Facebook 앱 ID 및 Chrome 맞춤 탭을 활성화하는 데 필요한 Facebook 앱 ID의 문자열을 만듭니다. 또한 FacebookActivity를 Android 매니페스트에 추가합니다.
  1. /app/res/values/strings.xml 파일을 엽니다.
  2. facebook_app_id, fb_login_protocol_schemefacebook_client_token 이름을 포함하여 string 요소를 추가하고 값을 앱 ID클라이언트 토큰으로 설정합니다. 예를 들어 앱 ID가 1234이고 클라이언트 토큰이 56789일 경우 코드는 다음과 같습니다.
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. /app/manifest/AndroidManifest.xml 파일을 엽니다.
  4. meta-data 요소를 앱 ID와 클라이언트 토큰의 application 요소에 추가합니다.
    <application android:label="@string/app_name" ...>
        ...
       	<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
       	<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
    
  5. Facebook에 대한 활동, Chrome 맞춤 탭에 대한 활동 및 인텐트 필터를 application 요소 내에 추가합니다.
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                    "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    
  6. uses-permission 요소를 application 요소 뒤의 매니페스트에 추가합니다.
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (선택 사항) 광고 ID 권한을 옵트아웃하려면 uses-permission 요소를 application 요소 뒤의 매니페스트에 추가합니다.
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. AndroidManifest.xml 파일에서 AutoLogAppEventsEnabled 플래그를 설정하여 앱 이벤트의 자동 로깅을 'true' 또는 'false'로 직접 설정할 수 있습니다.

  9. 프로젝트를 빌드합니다.

5. 패키지 이름 및 기본 클래스를 앱과 연결

이 단계를 완료하려면 로그인해야 합니다.

6. 앱용 개발 및 릴리스 키 해시 제공

이 단계를 완료하려면 로그인해야 합니다.

7. 앱에 대한 SSO 활성화

이 단계를 완료하려면 로그인해야 합니다.

8. Facebook 로그인 버튼 추가

앱에 Facebook 로그인을 추가하는 가장 간단한 방법은 SDK에서 LoginButton 을 추가하는 것입니다.   LoginButtonLoginManager에서 제공되는 기능을 감싸는 UI 요소입니다. 사용자가 버튼을 클릭하면 LoginManager에 설정된 권한과 함께 로그인이 시작됩니다. Facebook 로그인은 외부 사용자가 사용하려면 고급 public_profile 권한이 필요합니다. 이 버튼은 로그인 상태를 따라가고 사용자의 인증 상태에 따라 올바른 텍스트를 표시합니다.
Facebook 로그인 버튼을 추가하려면 먼저 레이아웃 XML 파일에 버튼을 추가합니다.
<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

9. 콜백 등록

이제 CallbackManager.Factory.create를 호출하여 로그인 응답을 처리할 callbackManager를 만듭니다.
callbackManager = CallbackManager.Factory.create();
버튼을 프래그먼트에 추가하는 경우 프래그먼트를 사용하도록 활동도 업데이트해야 합니다. Login button의 속성을 맞춤 설정하고 onCreate() 또는 onCreateView() 메서드에 콜백을 등록할 수 있습니다. 맞춤 설정할 수 있는 속성에는 LoginButton에 대한 권한, LoginBehavior, DefaultAudienceToolTipPopup.Style이 포함되어 있습니다. 예를 들면 다음과 같습니다.
      
    private static final String EMAIL = "email";
      
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList(EMAIL));
    // If you are using in a fragment, call loginButton.setFragment(this);    

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });
로그인 결과에 응답하려면 LoginManager 또는 LoginButton으로 콜백을 등록해야 합니다. LoginButton으로 콜백을 등록하는 경우 로그인 관리자에서 콜백을 등록하지 않아도 됩니다.
다음과 같이 활동 또는 프래그먼트의 onCreate() 메서드에 LoginManager 콜백을 추가합니다.
    callbackManager = CallbackManager.Factory.create();      
      
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                }
    });
로그인에 성공하면 LoginResult 매개변수에 새로운 AccessToken과 최근에 부여되거나 거부된 권한이 포함됩니다.
로그인에 성공하는 데 registerCallback을 사용할 필요가 없습니다. 아래 설명된 AccessTokenTracker 클래스와 함께 현재 액세스 토큰의 변경 내용을 따르도록 선택할 수 있습니다.
마지막으로 onActivityResult 메서드에서 callbackManager.onActivityResult를 호출하여 로그인 결과를 callbackManager를 통해 LoginManager에 전달합니다.

AndroidX 활동 또는 프래그먼트를 사용하고 있는 경우 'onActivityResult'를 재정의할 필요가 없습니다.

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Facebook SDK 로그인 또는 공유와 통합한 모든 활동과 프래그먼트에서 onActivityResultcallbackManager에 전달해야 합니다.

10. 로그인 상태 확인

앱에서는 한 번에 사용자 한 명만 로그인할 수 있으며 LoginManager는 로그인한 사용자의 현재 AccessTokenProfile을 설정합니다. Facebook SDK는 공유된 기본 설정에 이 데이터를 저장하고 세션 시작 시에 설정합니다. AccessToken.getCurrentAccessToken()Profile.getCurrentProfile()을 확인하여 사용자가 이미 로그인했는지 확인할 수 있습니다.
앱이 콜드 스타트에서 시작되는 경우 앱의 북마크나 캐시에서 SDK를 사용하여 AccessToken.getCurrentAccessToken을 읽어들일 수 있습니다. ActivityonCreate 메서드에서 유효성을 확인해야 합니다.
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
그런 다음 나중에 맞춤 버튼의 OnClickListener 등에서 실제 로그인을 수행할 수 있습니다.
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. 빠른 로그인 활성화

빠른 로그인은 모든 기기와 플랫폼에서 사용자를 Facebook 계정으로 로그인하도록 합니다. 사용자가 Android에 있는 앱에 로그인했다가 기기를 변경하는 경우, 빠른 로그인은 로그인 방법을 선택하게 하는 대신 Facebook 계정으로 로그인하도록 합니다. 이렇게 하면 중복 계정을 만들거나 로그인에 실패할 우려가 없습니다. Android 11에서 변경 사항을 지원하려면 먼저 다음 코드를 /app/manifest/AndroidManifest.xml 파일의 queries 요소에 추가하세요.
  
<queries> <package android:name="com.facebook.katana" /> </queries>   
빠른 로그인 기능은 다음 코드를 통해 활성화할 수 있습니다.
LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });   

다음 단계

축하합니다. Android 앱에 Facebook 로그인이 추가되었습니다! 자세한 고급 가이드는 Facebook의 다른 문서 페이지를 확인하세요.
사용자가 Facebook에서 자신의 데이터를 삭제해 달라고 요청할 경우 이 요청에 응답하기 위한 데이터 삭제 콜백을 구현하세요.
사용자의 액세스 토큰 및 프로필을 추적하세요.
앱에서 Facebook 로그인을 통해 액세스할 수 있는 데이터를 관리하세요.
Facebook 로그인을 통합하는 데 문제가 있나요? 일반적인 문제 및 해결 방법의 리스트를 확인하세요.
Facebook 로그인을 사용하는 사람들에게 요청하는 Facebook 데이터에 따라 출시 전에 검수를 위해 앱을 제출해야 할 수 있습니다.
나만의 로그인 플로를 빌드하려는 경우 로그인 플로 직접 빌드를 참조하세요.