iOS용 Facebook 로그인 - 빠른 시작

제한적 로그인을 위한 엔드포인트를 변경했으며, 이제 limited.facebook.com에서 제한적 로그인 기능에 액세스할 수 있습니다.

사용자가 Facebook으로 앱에 로그인하는 경우, 사용자는 Facebook에서 대신 정보를 가져오거나 작업을 수행하도록 앱에 권한을 부여할 수 있습니다.

iOS 프로젝트에 Facebook 로그인을 추가하기 위한 단계는 아래와 같습니다.

1. 로그인

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

2. 개발 환경 설정

iOS용 Facebook 로그인을 사용하기 전에 개발 환경을 설정하세요.

Swift 패키지 관리자(SPM) 사용
  1. Xcode에서 파일 > Swift 패키지 > 패키지 종속성 추가를 클릭합니다.
  2. 그 후에 나타나는 대화 상자에서 저장소 URL(https://github.com/facebook/facebook-ios-sdk)을 입력합니다.
  3. 버전최신 iOS용 Facebook SDK의 버전 번호를 입력합니다.
  4. 프롬프트를 작성하여 프로젝트에 사용할 라이브러리를 선택합니다.

3. Facebook에 앱 등록 및 구성

번들 식별자를 추가하여 Facebook 로그인을 사용할 수 있도록 앱을 등록하고 구성하세요.

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

4. 프로젝트 구성

앱에 대한 데이터가 포함된 XML 픽셀 코드로 Info.plist 파일을 구성하세요.

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

  1. Info.plist를 마우스 오른쪽 버튼으로 클릭하고 소스 코드로 열기를 선택합니다.
  2. 다음 XML 픽셀 코드를 복사하여 파일의 본문(<dict>...</dict>)에 붙여넣습니다.
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>fbAPP-ID</string>
      </array>
      </dict>
    </array>
    <key>FacebookAppID</key>
    <string>APP-ID</string>
    <key>FacebookClientToken</key>
    <string>CLIENT-TOKEN</string>
    <key>FacebookDisplayName</key>
    <string>APP-NAME</string>
  3. [CFBundleURLSchemes] 키의 <array><string>에서 APP-ID를 앱 ID로 대체합니다.
  4. FacebookAppID 키의 <string>에서 APP-ID를 앱 ID로 대체합니다.
  5. FacebookClientToken 키의 <string>에서 CLIENT-TOKEN을 앱 대시보드의 설정 > 고급 > 클라이언트 토큰에 나와 있는 값으로 대체합니다.
  6. FacebookDisplayName 키의 <string>에서 APP-NAME을 앱 이름으로 대체합니다.
  7. Facebook 앱으로 앱 전환을 수행할 수 있는 Facebook 대화 상자(예: 로그인, 공유, 앱 초대 등)를 사용하려면 앱의 Info.plist에 다음 항목도 포함해야 합니다.
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-share-api</string>
    </array>

FacebookAutoLogAppEventsEnabledInfo.plist에서 키로 추가하면 앱 이벤트의 자동 수집을 'true' 또는 'false'로 직접 설정할 수 있습니다.

Mac Catalyst 앱에서 로그인이 작동하려면 프로젝트에 키체인 공유 기능을 포함해야 합니다.
  1. 앱 타겟을 구성할 때 서명 및 기능 탭에서 + 기능 버튼을 선택합니다.
  2. 키체인 공유 기능을 찾아서 선택합니다.
  3. 키체인 공유 기능이 타겟에 대해 등록되어 있는지 확인합니다.

5. 앱 델리게이트 연결

다음 코드를 사용하여 AppDelegate.swift 메서드의 코드를 대체합니다. 이 코드는 앱이 시작될 때 SDK를 초기화하며, 로그인이나 공유 작업을 수행할 때 SDK가 Facebook 네이티브 앱의 로그인과 공유를 처리하도록 합니다. 그렇지 않으면 사용자가 Facebook에 로그인한 상태에서만 앱 내 브라우저를 통해 로그인할 수 있습니다.
    
// AppDelegate.swift
import UIKit
import FacebookCore

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {    
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {          
        ApplicationDelegate.shared.application(
            application,
            didFinishLaunchingWithOptions: launchOptions
        )

        return true
    }
          
    func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey : Any] = [:]
    ) -> Bool {
        ApplicationDelegate.shared.application(
            app,
            open: url,
            sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
            annotation: options[UIApplication.OpenURLOptionsKey.annotation]
        )
    }  
}

iOS 13은 URL을 여는 기능을 SceneDelegate로 이동했습니다. iOS 13을 사용하는 경우 다음의 메서드를 SceneDelegate 에 추가하여 로그인이나 공유 등의 기능이 의도한 대로 작동하도록 하세요.
// SceneDelegate.swift
import FacebookCore
  ...
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else {
        return
    }

    ApplicationDelegate.shared.application(
        UIApplication.shared,
        open: url,
        sourceApplication: nil,
        annotation: [UIApplication.OpenURLOptionsKey.annotation]
    )
}

6. 코드에 Facebook 로그인 추가

iOS 앱에 Facebook 로그인 버튼을 사용하세요.

6a. 코드에 Facebook 로그인 추가

Facebook 브랜드의 로그인 버튼을 앱에 추가하려면 다음 코드 조각을 View Controller에 추가합니다.
// Add this to the header of your file, e.g. in ViewController.swift 
import FacebookLogin

// Add this to the body
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
	
        let loginButton = FBLoginButton()
        loginButton.center = view.center
        view.addSubview(loginButton)
    }
}
이때 Facebook 로그인 버튼을 사용하여 앱을 실행하고 로그인할 수 있어야 합니다.

6b. 현재 로그인 상태 확인

앱에는 한 번에 한 명의 사용자만 로그인할 수 있습니다. Facebook에서는 사용자가 AccessToken.current를 통해 앱에 로그인했음을 표시합니다.
LoginManager에서 이 토큰을 설정하고, AccessToken.current을 설정할 때 이 토큰을 자동으로 키체인 스토어에도 씁니다.
AccessToken에는 사용자를 식별하는 데 사용할 수 있는 userID가 포함되어 있습니다.
로드할 때 기존 토큰을 확인하려면 View Controller를 업데이트해야 합니다. 이렇게 하면 누군가 이미 앱에 권한을 부여한 경우 불필요한 로그인 플로를 다시 표시하지 않아도 됩니다.
override func viewDidLoad() {
    super.viewDidLoad()

    if let token = AccessToken.current,
        !token.isExpired {
        // User is logged in, do work such as go to next view controller.
    }
}
    

6c. 권한 요청

Facebook 로그인을 사용할 때 앱에서 사용자 데이터의 일부에 대한 권한을 요청할 수 있습니다. 외부 사용자가 Facebook 로그인을 사용하려면 고급 public_profile 권한이 필요합니다.
Facebook 로그인 버튼의 읽기 권한
추가 읽기 권한을 요청하려면 permissions 속성을 FBLoginButton 개체에 설정하세요.
// Extend the code sample from 6a. Add Facebook Login to Your Code
// Add to your viewDidLoad method:
loginButton.permissions = ["public_profile", "email"]
  
사용자에게 앱에 요청된 권한을 부여하라는 메시지가 표시됩니다. 일부 권한에는 로그인 검수가 필요합니다. 권한에 대한 자세한 내용은 권한 관리를 참조하세요.

7. 다음 단계

축하합니다. iOS 앱에 Facebook 로그인이 추가되었습니다! 자세한 고급 가이드는 Facebook의 다른 문서 페이지를 확인하세요.
사용자가 Facebook에서 자신의 데이터를 삭제해 달라고 요청할 경우 이 요청에 응답하기 위한 데이터 삭제 콜백을 구현하세요.
앱에 이벤트를 추가하여 분석 결과를 보고 광고 성과를 측정하며 광고 타게팅 대상을 구축해 보세요.
iOS 앱용 Facebook 로그인의 고급 설정을 확인하세요.
앱에서 Facebook 로그인을 통해 액세스할 수 있는 데이터를 관리하세요.
Facebook SDK에서 반환한 오류에 응답하는 방법을 확인하세요.
Facebook 로그인 플로가 작동하는지 테스트하고 확인하세요.
Facebook 로그인을 사용하는 사람들에게 요청하는 Facebook 데이터에 따라 출시 전에 검수를 위해 앱을 제출해야 할 수 있습니다.
나만의 로그인 플로를 빌드하려는 경우 로그인 플로 직접 빌드를 참조하세요.