2012-04-14 4 views
1

최근 내 Facebook 통합을 내 앱에 추가했으며 사용자가 앱을 다시 시작한 경우를 제외하고는 모든 것이 잘 작동합니다. 앱이 다시 시작될 때마다 Facebook은 승인 절차를 거쳐야합니다. 여기에는 Safari/Facebook으로 전환 한 다음 내 앱으로 다시 전환하는 작업이 포함됩니다. 어떻게하면 Facebook이 정보를 저장하게 할 수 있습니까? 아니면 지속적으로 재 인증하지 않도록 내 앱에 대한 담요 사용 권한을 얻을 수 있습니까?각 앱을 시작할 때마다 페이스 북은 항상 재 인증을 받았습니까?

facebook = [[Facebook alloc] initWithAppId:@"203604286395694" andDelegate:self]; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) { 
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
} 
if (![facebook isSessionValid]) { 
    [facebook authorize:nil]; 
} 

관련 페이스 북 위임 방법 : 여기

applicationDidFinishLaunchingWithOptions: 방법에서 내 코드입니다

- (void)fbDidLogin { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

} 

- (void) requestDialogButtonClicked { 
    NSMutableDictionary* params = 
    [NSMutableDictionary dictionaryWithObjectsAndKeys: 
    @"invites you to check out cool stuff", @"message", 
    @"Check this out", @"notification_text", 
    nil]; 
    [facebook dialog:@"apprequests" 
      andParams:params 
     andDelegate:self]; 
} 

- (void)dialogDidComplete:(FBDialog *)dialog { 
    NSLog(@"dialog completed successfully"); 
} 

답변

0

당신은 페이스 북이 인증 요구하고있다 : 어디? 그것이 fbDidLogin이 트리거되는 방법입니다. 당신이 있다고 가정하면 동작은 토큰이나 날짜 (또는 둘 다)가 nil이거나 날짜가 만료 (가능성 없음)임을 나타냅니다.

사용자 기본값을 쓰고 읽을 때 값을 기록하십시오. 내 생각 엔 fbDidLogin 메서드를 호출하지 않거나 nil 값을 저장하지 않고 권한 부여가 호출되지 않았거나 (응용 프로그램 키 또는 코드에 표시되지 않은 다른 문제로 인해) 실패했습니다.

+0

Null이 아닌 값으로 인증이 호출되고 있습니다. 그러나'fbDidLogon'은 절대로 호출되지 않습니다. 나는 권한 부여 호출과 fbDidLogon 메소드 모두에 중단 점을 넣었지만 두 번째 것은 첫 번째 호출 이후에 히트되지 않습니다. – Jumhyn

+0

@Malek_Jundi 님의 댓글보기 오류 콜백을 가져와야합니다. 그 didNotLogin 메서드와 NSLog를 구현하십시오. – danh

0

앱을 승인 할 때 권한을 요청하지 않기 때문입니다. "offline_access"는 장기 액세스 토큰을 제공하므로 사용자가 Facebook을 사용하려고 할 때마다 새 액세스 토큰을받을 필요가 없습니다. 그래서 당신이

if (![facebook isSessionValid]) { 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
      @"user_likes", 
      @"read_stream", 
      @"offline_access" 
      nil]; 
     [facebook authorize:permissions]; 
     [permissions release]; 
} 

편집처럼 응용 프로그램을 승인 필요 :

1.you하기 (페이스 북의 응용 프로그램 위임에 다음과 같은 기능을 추가해야합니다 이 구현에서 다음을 확인하시기 바랍니다 여기에있는 객체는 인스턴스입니다. FaceBook 클래스의 e 값).

// Pre 4.2 support 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    return [facebook handleOpenURL:url]; 
} 

// For 4.2+ support 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    return [facebook handleOpenURL:url]; 
} 

2.In 당신의 Info.plist이 URL 유형> URL 구성표에 추가> FB 접두사와 페이스 북 앱 ID는 (드디어 값은 전이 같은 것입니다. fb313714 ***).

+0

제안한 코드를 추가했지만 행운은 없습니다. 사용자는 실제로 액세스를 다시 허용 할 필요가 없습니다. 내 앱이 Facebook으로 전환되고 짧은로드 후에 즉시 전환됩니다. – Jumhyn

+0

이것은 이상합니다! 'fbDidLogin'이 호출되고 있습니까? –

+0

아니요, 그렇지 않습니다. 그것은'authorize'가 올바르게 호출 된 후에 호출되어야합니까? – Jumhyn