iOS용 Facebook SDK FAQ 및 문제 해결

하나의 Facebook 앱 ID를 여러 iOS 앱에서, 예를 들어 앱의 무료 및 유료 버전 사이에서 사용할 수 있습니다.

앱의 .plist 파일에 URL 스키마 접미사 매개변수인 FacebookUrlSchemeSuffix를 정의합니다.

참고: 접미사는 영문자에서만 사용할 수 있습니다.

SDK zip에는 SDK 리소스의 현지화된 문자열이 포함된 FacebookSDKStrings.bundle이 포함됩니다. Apple의 문서에 설명된 대로 앱에 번들을 포함하고 Base Internationalization(기본 다국어화)을 활성화하세요.

iOS 다운로드 영역에서 이전 SDK 버전을 다운로드할 수 있습니다.

네이티브 공유 대화 상자는 Facebook iOS 앱의 일부이므로 시뮬레이터에서 실행할 수 없습니다. 실제 기기를 사용하여 네이티브 공유 대화 상자를 테스트하세요. Facebook에서는 시뮬레이터에서 네이티브 공유 대화 상자를 테스트할 수 있게 하는 방법을 모색 중입니다.

Facebook SDK 클래스를 사용하려는 각 파일의 상단에 올바른 import 문이 있는지 확인합니다. 예시:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

Objective-C의 프레임워크를 사용할 때 기존 클래스를 확장하는 카테고리를 사용하는 클래스는 자동으로 읽어들이지 않습니다.

이러한 클래스에서 확장된 메서드를 호출하려고 하면 unrecognized selector sent to instance 오류가 표시됩니다. 예를 들어 .xib 파일에 보기를 그린 다음 인터페이스 빌더 UI에서 FBSDKLoginButton으로 설정하여 인터페이스에 FBSDKLoginButton을 추가한 경우 Xcode 인터페이스 빌더에서 사용된 클래스도 자동으로 읽어들이지 않습니다. 따라서 메서드를 호출하려고 하면 다시 unrecognized selector sent to instance 오류가 발생합니다. 이 문제를 해결하는 옵션은 두 가지가 있습니다.

다음을 호출하여 앱 델리게이트의 application:didFinishLaunchingWithOptions:에 수동으로 클래스를 읽어들일 수 있습니다.

[FBSDKLoginButton class];

또는 -ObjC 링커 플래그를 추가할 수 있습니다. 이 플래그는 Objective-C 클래스 또는 카테고리를 정의하는 SDK의 모든 개체 파일을 읽어들이도록 링커에 지시합니다. 이 접근 방식을 사용하면 모든 클래스가 제대로 작동할 수 있지만 앱에 읽어들인 추가 개체 코드 때문에 실행 가능 파일의 크기가 늘어납니다.

-ObjC 플래그를 추가하려면 프로젝트 대상을 클릭하고 "Build Settings"(빌드 설정) 탭을 선택합니다. "Link"(링크)에서 "Other Linker Flags"(기타 링커 플래그)를 두 번 클릭하여 -ObjC를 추가합니다.

FBSDKRequestConnection은 활성 RunLoop이 필요한 NSURLConnection을 사용합니다. 기본 스레드 외부에서 사용하는 경우 직접 관리해야 합니다.

또는 FBSDKRequestConnectiondelegateQueue 속성을 설정할 수 있습니다.

일반적으로 .plist에 구성 오류가 있을 수 있습니다. .plistFacebookAppIDFacebookDisplayName에 대한 행 및 fb{app-id}에 대한 URL 유형 항목이 포함되어 있는지 확인하세요.

그래프 API 요청 시 예상치 않은 결과를 얻는 경우 요청 앞에 다음 코드를 추가하여 디버그 모드를 활성화합니다.

[FBSettings setLoggingBehavior:
    [NSSet setWithObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]];

정보 레벨 메시지는 표시하지 않고 경고만 표시하려는 경우 FBSDKLoggingBehaviorGraphAPIDebugWarning을 사용합니다.

이 로깅 동작을 사용하면 모든 그래프 API 요청에 debug 매개변수를 추가하고 발생한 모든 문제를 콘솔에 출력합니다.

여기에서 그래프 API 디버그 모드에 대한 자세히 내용을 읽어볼 수 있습니다.

사용자가 로그인 대화 상자에서 취소 버튼을 명시적으로 누르거나 사용자의 앱으로 다시 수동 앱 전환을 수행하는 경우(암시적 취소라고 부름) SDK에서 취소를 보고합니다. 앱 델리게이트 라이프사이클은 암시적 취소를 모방하므로, 이 라이프사이클의 일부로 로그인 플로를 시작하지 않아야 합니다(예: application:openURL:sourceApplication:annotation:에서 로그인 시작). 부득이한 경우에만 앱 델리게이트 라이프사이클이 먼저 완료되도록 나중에 기본 대기열로 로그인 시작을 보냅니다.

  • Facebook SDK에는 Apple 광고 ID(IDFA)에 액세스하기 위한 코드가 포함되어 있지만 이 코드는 특정 상황에서만 실행됩니다.
  • iOS용 Facebook SDK는 다음과 같은 경우에만 IDFA에 액세스합니다. 1) 앱에서 Facebook의 Audience Network를 통해 앱 내에 광고를 전송하는 경우 또는 2) 앱에서 해당 이벤트를 광고 캠페인의 결과로 돌리기 위해 앱 설치 또는 기타 모바일 앱 이벤트를 기록하는 경우.
  • FBSDKAppEvents 클래스를 통해 앱 이벤트를 기록하지 않는 경우에는 Facebook SDK에서 IDFA에 액세스하지 않습니다. 또한 Facebook SDK에 AdSupport.framework를 포함할 필요가 없습니다.
  • IDFA를 수집하지 않고 앱 이벤트를 추적하려는 경우 앱 대시보드의 고급 설정 섹션에서 IDFA 수집을 비활성화할 수 있습니다.

공유 대화 상자에는 사용자 액션이 발생할 때 델리게이트의 sharer:didCompleteWithResults:sharerDidCancel: 메서드가 표시됩니다.

  • 사용자가 정상적으로 공유하는 경우에는 sharer:didCompleteWithResults:가 표시됩니다. 또한 사용자가 앱에 publish_actions 권한을 제공하는 경우 results 정보에 postId 키도 포함됩니다. 사용자가 Facebook 로그인을 사용하여 로그인하지 않은 경우 Cancel을 클릭하면 이 메서드도 호출됩니다.
  • 공유 대화 상자의 X 버튼을 클릭하거나, Facebook 로그인을 사용하여 로그인한 다음 취소를 클릭한 경우 sharerDidCancel:가 표시됩니다.

요청할 때 예상치 못한 결과를 얻으면 FBSDKGraphRequests의 디버깅을 설정합니다. 요청 전에 이 코드를 추가하세요.

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

서버에서 직접 요청과 응답을 보고 문제를 디버깅할 수 있습니다.

로깅할 수 있는 기타 사항이 있는지 FBSDKSettings.h에 정의된 기타 FBSDKLoggingBehavior* 상수를 확인합니다.