0

http://developers.facebook.com/docs/howtos/link-to-your-native-app/을 읽었으며 3.0에서 딥 링크를 처리하는 방법에 대해 혼란스러워합니다. 사용자가 내 앱에 대한 appRequest를 클릭하고 FB가 특수 URL로 내 앱을 연다 고 가정 해 보겠습니다. 내 AppDelegate에의의 OpenURL 방법을 가지고하는 것은 수행딥 링크 및 Facebook의 FBSessionDelegate iOS SDK 3.0

return [FBSession.activeSession handleOpenURL:url]; 

튜토리얼은 말한다 :

If your app requires an authorized user, handle the processing of the target URL in the 
SDK callbacks implemented after a successful login, the fbDidLogin method. 

그러나, fbDidLogin 위임 방법은 더 이상 3.0에 있기 때문에라고 우리는 FBSession.activeSession를 사용하는 대신 사용으로 전환하지 facebook.m 개체입니다. 사실, FBSessionDelegate 메소드는 페이스 북 객체의 상태가 변경되지 않기 때문에 호출되지 않습니다. 그렇다면 URL을 어디에서 처리해야합니까?

답변

0

세션을 열 때 설정 한 처리기에서이를 처리 할 수 ​​있습니다. 당신은 정의 할 수 있습니다 세션 변경을 처리하기 위해 설정하는 방법에 처리 코드를 딥 링크를 넣어 둘 수 있었다

[FBSession openActiveSessionWithReadPermissions:nil 
             allowLoginUI:YES 
           completionHandler:^(FBSession *session, 
                FBSessionState state, 
                NSError *error) { 
            [self sessionStateChanged:session 
                 state:state 
                 error:error]; 
           }]; 

, 예 :

당신은 같은 것을 사용하여 세션을 열 예를 들어

- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: 
      if (!error) { 
       // Handle deep link  
      } 
      break; 
     case FBSessionStateClosed: 
      self.user = nil; 
      break; 
     case FBSessionStateClosedLoginFailed: 
      self.user = nil; 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      break; 
     default: 
      break; 
    } 

    if (error) { 
     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:@"Error" 
            message:error.localizedDescription 
            delegate:nil 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     [alertView show]; 
    } 
} 

딥 링크 처리를위한 작동 예제는 https://github.com/fbsamples/ios-social-cafe/

을 참조하십시오.