2013-08-24 4 views
0

Facebook SDK를 내 응용 프로그램에 통합하려고하는데 내 시뮬레이터에서 완벽하게 작동합니다. iPhone에 설치하고 실행하면 "myapp에서 내 프로필, 친구 목록 등에 액세스해야합니다"라는 경고가 표시되고 아무 것도 실행하지 않도록 선택하면 이러한 사용 권한이 필요합니다.iPhone의 Facebook SDK 로그인 문제

내 iPhone에 Facebook 응용 프로그램을 설치했고, 여러 번 로그 아웃했으나 사용하지 않았습니다.

하지만, 내가 설정으로 이동하고, 페이스 북 정보를 삭제할 때, 그것은 완벽하게 작동합니다 :

enter image description here

가 어떻게이 문제를 해결할 수 있습니까?

+0

코드를 게시하십시오. – keen

+0

번들 ID와 AppKey가 일치합니까 ?? –

답변

0

나는 나에 대한 작업 방법을 다음과 같은 사용 :

-(void)openFacebookAuthentication 
{ 
    NSArray *permission = [NSArray arrayWithObjects:kFBEmailPermission,kFBUserPhotosPermission, nil]; 

    FBSession *session = [[FBSession alloc] initWithPermissions:permission]; 

    [FBSession setActiveSession: [[FBSession alloc] initWithPermissions:permission] ]; 

    [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 

     switch (status) { 
      case FBSessionStateOpen: 
       [self getMyData]; 
       break; 
      case FBSessionStateClosedLoginFailed: { 
       // prefer to keep decls near to their use 
       // unpack the error code and reason in order to compute cancel bool 
       NSString *errorCode = [[error userInfo] objectForKey:FBErrorLoginFailedOriginalErrorCode]; 
       NSString *errorReason = [[error userInfo] objectForKey:FBErrorLoginFailedReason]; 
       BOOL userDidCancel = !errorCode && (!errorReason || [errorReason isEqualToString:FBErrorLoginFailedReasonInlineCancelledValue]); 


       if(error.code == 2 && ![errorReason isEqualToString:@"com.facebook.sdk:UserLoginCancelled"]) { 
        UIAlertView *errorMessage = [[UIAlertView alloc] initWithTitle:kFBAlertTitle 
                      message:kFBAuthenticationErrorMessage 
                      delegate:nil 
                      cancelButtonTitle:kOk 
                      otherButtonTitles:nil]; 
        [errorMessage performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 
        errorMessage = nil; 
        } 
       } 
       break; 
       // presently extension, log-out and invalidation are being implemented in the Facebook class 
      default: 
       break; // so we do nothing in response to those state transitions 
     } 
    }]; 
    permission = nil; 
} 
+0

KSR : 코드는 어디에 있습니까? –

0

페이스 북의 개발자/애플리케이션을 앱에 추가해야합니다!

하지 않으면, 당신은

+0

내가 젠체하는 짓을했다, 그것은 작동 wen 설정 페이 스북 세부 정보가 삭제됩니다 ...... – KSR

+0

나는 IPHONE에 settnings에서 페이스 북의 로그인 세부 정보를 의미 – KSR

0

좋아요 ... 자신의 서버와 상호 작용할 수 없습니다, 내가 잘못 무슨 일이 일어나고 있는지 알고있다. 당신이하고있는 일이 옳다는 것을 알려주세요. 그러나 당신이 원하는 결과는 다른 것을 요구할 것입니다.

이 시도 - 모든

먼저 앱 위임의 모든 페이스 북 SDK의 대리자 메서드를 구현합니다.

- (IBAction)loginWithFacebookButtonTapped:(id)sender 
{ 
    IntubeAppDelegate *delegat = (IntubeAppDelegate*)[[UIApplication sharedApplication] delegate]; 
    [delegat doLoginAndSwitch]; 
} 

지금, 당신의 AppDelegate에에 -

-(void) doLoginAndSwitch 
{  
    [self openSessionWithAllowLoginUI:YES]; 
} 

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI 
{ 
    NSArray *permissions = [NSArray arrayWithObjects:@"email", nil]; 
    return [FBSession openActiveSessionWithPublishPermissions:permissions 
              defaultAudience:FBSessionDefaultAudienceFriends 
              allowLoginUI:YES 
             completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 

              [self sessionStateChanged:session 
                   state:state 
                   error:error]; 

             }]; 
} 

-(BOOL)openSessionWithAllowPublishStreamPermission:(BOOL)allowLoginUI 
{ 
    NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions",@"publish_stream", nil]; 

    [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:^(FBSession *session, NSError *error){ 
}]; 
    return YES; 
} 

- (void)sessionStateChanged:(FBSession *)session 
        state:(FBSessionState)state 
        error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: 
      if(!error) 
      { 
       // NSLog(@"FBSessionStateOpen :- logged in"); 

       [self openSessionWithAllowPublishStreamPermission:YES]; 

       // Your code 
      } 
    }  
} 

또한 응용 프로그램에 다시 전환 -

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 

    return [FBSession.activeSession handleOpenURL:url]; 
} 

을 나는 당신이 당신이 지금 원하는 것을 얻을 것이다 바랍니다. :)