Facebook SDK가 언제가 업데이트 되면서,
iOS의 설정에 있는 Facebook 계정을 통하지 않고, Facebook 앱을 통해서 인증이 되는 상황이 되었다.
분명히 초기 SDK 버전에는 설정의 Facebook 계정을 통해서 인증을 했던 것 같은데, 도무지 알 수가 없었다.
"FBSessionLoginBehavior"라고 define 되어있는 녀석을 활용하면 되는데,
"FBSessionLoginBehaviorUseSystemAccountIfPresent" 이것이 핵심이다.
completionHandler에 해당하는 부분은 미리 선언하고, 다음과 같이 코드를 작성한다.
if ([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded) { // we have a cached token, so open the session [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:completionHandler]; } else { [FBSession.activeSession closeAndClearTokenInformation]; [FBSession renewSystemCredentials:^(ACAccountCredentialRenewResult result, NSError *error) { NSLog(@"%@", error); }]; [FBSession setActiveSession:nil]; // create a new facebook session // FBSession *fbSession = [[FBSession alloc] initWithPermissions:@[@"read_friendlists"]]; FBSession *fbSession = [[FBSession alloc] initWithAppID:nil permissions:@[@"read_friendlists"] defaultAudience:FBSessionDefaultAudienceEveryone urlSchemeSuffix:nil tokenCacheStrategy:[FBSessionTokenCachingStrategy nullCacheInstance]]; [FBSession setActiveSession:fbSession]; [fbSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:completionHandler]; }
위의 코드에서 FBSession을 새로 생성해주는 부분이 있는데
주석 처리한 코드를 사용하게 될 때 퍼미션에는 읽기 권한만을 넣어야 한다.
설명에는 읽기 또는 쓰기 한 종류의 퍼미션만 사용할 수 있다고 되어 있는데
막상 쓰기 권한을 넣으면 앱이 죽어버린다.
아무래도 이유는 Facebook API가 2.0으로 업데이트 되면서 쓰기 권한에 대한 공개 설정 여부가 업데이트 된 것 같다.
그래서 defaultAudience에 대한 조건을 주는 메소스가 존재해야 되는데 인증 부분에서는 그 부분이 필요하지만,
SDK에는 관련 부분이 업데이트 되지 않아서 발생하는 문제로 보여진다.
최종적으로 이렇게 코드를 작성하면 먼저 iOS의 설정에 있는 Facebook 계정으로 인증을 시도하고,
그 값이 없으면 Facebook 앱, 앱이 설치 되어 있지 않다면 사파리로 인증을 하게 된다.
'Mobile Application > iOS' 카테고리의 다른 글
[PhotoKit] 카메라 롤과 일반 앨범 가져오기. (0) | 2015.03.01 |
---|---|
[AssetLibrary] 원본 이미지 가져오기. (0) | 2015.03.01 |
[PhotoKit] 카메라 롤과 일반 앨범 분류하기. (0) | 2015.02.27 |
[PonyDebugger] Server 설치하기 (0) | 2015.02.26 |
[Keyboard] 키보드 닫기 (0) | 2011.07.24 |