아무 것도 읽지 않습니다 (많은 FB 개발자 기사 및 SO 질문) 도움이되므로 여기에 게시 할 생각입니다. 이 모든 것을 iOS 6 및 Facebook SDK 3.1.1에서 사용할 수 있도록 노력하고 있습니다.iOS 6 Facebook 로그인이 새로 고침되지 않음 액세스 토큰
iOS 앱이 Facebook 인증을 받으면 내 서버에 access_token을 전달하고 사용자가 이제 내 앱에 로그인합니다. 그들이 페이스 북과 관련하여 할 수있는 유일한 다른 일은 벽에 뭔가를 게시하는 것입니다. 사용자가 자신의 설명을 추가 할 수 있도록 기존의 대화 상자 창을 사용하고 있습니다.
모든 것이 처음 1 시간 정도 새 설치에서 완벽하게 작동합니다. 사용자가 iOS 설정 앱을 통해 로그인 한 경우 빠른 IOS 확인 상자가 표시되고 토큰을 받고 내 서버로 보내면 모두 좋습니다.
페이스 북의 액세스 토큰 디버거에받은 토큰을 붙여 넣으면 1 시간 후에 만료됩니다.
{"error_code":190,"
error_msg":"Error validating access token:
Session has expired at unix time 1351497600.
The current unix time is 1351525180. }
- 때문에 일이 방금 무슨 일을 내가 어떻게해야합니까 :
내가 그 시간을 기다린 후 다시 응용 프로그램에 올 경우, 내가하려고 아무것도 나를이 오류를 준다? I've read SDK 3.1.1 FBSession에서이를 처리 할 것이지만 그 경우와 같지는 않습니다. 내 액세스 토큰이 만료되고 일단 실행되면 iOS/FB SDK가 새로 고침을하지 않습니다.
- 심지어 로그 아웃하면 (
[FBSession.activeSession closeAndClearTokenInformation]
)이 문제가 해결되지 않습니다. 내가 할 수 있었던 유일한 일은 iOS 시뮬레이터 환경 설정에서 "콘텐츠 및 설정 재설정"이며, Settings.app에서 FB 자격 증명을 다시 입력하고 내 응용 프로그램을 다시 작성합니다. 그래야만 한 시간 후에 만료되는 다른 토큰을 얻을 수 있습니다.
랜덤 노트 : 내 응용 프로그램이 다시 시작했을 때, 나는 위의 링크 된 SO 질문에 따르면
[FBSession.activeSession handleDidBecomeActive]
및 [self.facebook extendAccessTokenIfNeeded]
를 호출하고있어
- 는 SDK가 자동으로
FBSession#renewSystemAuthorization
를 호출해야합니다. NSLog를 거기에 넣었습니다. 나는 그 메소드가 호출되는 것을 결코 보지 못합니다.
UPDATE # 1은 :
나는 SDK가 만료/유효하지 않은 토큰을 처리 할 읽었습니다 언급했다. FBRequestConnection # completeWithResults : orError :에서 발생해야합니다. 코드 경로에 대한 참고 사항은 인라인 주석을 참조하십시오.
- (void)completeWithResults:(NSArray *)results
orError:(NSError *)error
{
int count = [self.requests count];
for (int i = 0; i < count; i++) {
FBRequestMetadata *metadata = [self.requests objectAtIndex:i];
id result = error ? nil : [results objectAtIndex:i];
NSError *itemError = error ? error : [self errorFromResult:result];
id body = nil;
if (!itemError && [result isKindOfClass:[NSDictionary class]]) {
NSDictionary *resultDictionary = (NSDictionary *)result;
body = [FBGraphObject graphObjectWrappingDictionary:[resultDictionary objectForKey:@"body"]];
}
...
// *******************************************
// My code actually falls into this block, proving that I do in fact have an invalid session
// *******************************************
if ([self isInvalidSessionError:itemError
resultIndex:error == itemError ? i : 0]) {
[metadata.request.session closeAndClearTokenInformation:itemError];
// *******************************************
// Unfortunately metadata.request.session is nil, so this condition is never
// run, so renewySystemAuthorization is never called
// *******************************************
if (metadata.request.session.loginType == FBSessionLoginTypeSystemAccount){
[FBSession renewSystemAuthorization];
}
}
...
}
오래 지속되는 액세스 토큰이 맞습니까? 만료일은 토큰을 [Debugger] (https://developers.facebook.com/tools/debug)에 입력하면 어떻게됩니까? 내 수명이 긴 토큰은 "만료 : 1356716436 (약 2 개월 후)" –
으, 매우 흥미 롭습니다. 좋은 생각. 디버거에 연결하면 (https://developers.facebook.com/tools/debug 모르는 사람들을 위해) "만료 : 1351540800 (약 1 시간 후)"라고 표시됩니다. SDK 문서와 예제를 아주 자세히 읽은 것처럼 느껴집니다. 내 앱은 처음 1 시간 내에 훌륭하게 작동하지만 이후에는 갱신 된 토큰을 얻을 수 없습니다. 어떤 아이디어? – djibouti33
앱 대시 보드 설정에 대한 정보를 제공 할 수 있습니까? 고급> 인증 섹션의 설정은 예제로 무엇입니까? 설정에서 생각할 수있는 문서와 다른 점은 무엇입니까? –