Я знаю, что этот вопрос был задан, но я весь день перечитывал темы и применил все исправления, которые смог найти, и все еще имею проблему.
Я пытаюсь реализовать новую функцию единого входа Facebook SDK, чтобы мое приложение могло проходить проверку подлинности с помощью приложения Facebook вместо веб-просмотра. Когда мое приложение переключается на приложение Facebook, оно говорит, что загружается на несколько секунд и переключается обратно, но токен все еще равен нулю. У меня есть ощущение, что это связано со схемой URL для моего приложения, но я следовал многим учебным пособиям и уверен, что мои текущие значения plist верны:
![enter image description here](https://i.stack.imgur.com/UtuZS.png)
Вот код, который я реализовал в моих файлах appDelegate и viewController:
appDelegate.h
Facebook *facebook;
appDelegate.m
// 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];
}
SecondViewController.m
-(IBAction) fbButton {
//FACEBOOK INTEGRATION
appDelegate.facebook = [[Facebook alloc] initWithAppId:@"222087841143437" andDelegate:appDelegate];
// Check and retrieve authorization information
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
appDelegate.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
appDelegate.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![appDelegate.facebook isSessionValid]) {
appDelegate.facebook.sessionDelegate = self;
[appDelegate.facebook authorize:permissions];
NSLog(@"Token: %@", [defaults objectForKey:@"FBAccessTokenKey"]);
} else {
NSLog(@"Already logged in!");
}
[appDelegate.facebook requestWithGraphPath:@"me" andDelegate:self];
}
- (void)request:(FBRequest *)request didLoad:(id)result {
NSString *nameID = [[NSString alloc] initWithFormat:@"%@ (%@)", [result objectForKey:@"name"], [result objectForKey:@"id"]];
NSMutableArray *userData = [[NSMutableArray alloc] initWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:
[result objectForKey:@"id"], @"id",
nameID, @"name",
[result objectForKey:@"picture"], @"details",
nil], nil];
[userData release];
[nameID release];
NSLog(@"DATA RECEIVED: %@", result);
}
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
NSLog(@"request:didReceiveResponse:");
}
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
NSLog(@"%@", [error localizedDescription]);
NSLog(@"Err details: %@", [error description]);
};
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[[appDelegate facebook] accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[[appDelegate facebook] expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
NSLog(@"Facebook Logged in!");
[appDelegate.facebook requestWithGraphPath:@"me" andDelegate:self];
}
Я знаю, что дважды вызываю [appDelegate.facebook requestWithGraphPath: @ "me" andDelegate: self], но не думаю, что это проблема.
Вот фрагмент из консоли, когда я нажимаю кнопку входа в систему:
2011-10-18 15:37:33.287 Track[2235:707] Token: (null)
2011-10-18 15:37:36.578 Track[2235:707] request:didReceiveResponse:
2011-10-18 15:37:36.584 Track[2235:707] The operation couldn’t be completed. (facebookErrDomain error 10000.)
2011-10-18 15:37:36.586 Track[2235:707] Err details: Error Domain=facebookErrDomain Code=10000 "The operation couldn’t be completed. (facebookErrDomain error 10000.)" UserInfo=0x1ce480 {error=<CFBasicHash 0x1c9560 [0x3e368630]>{type = mutable dict, count = 2,
entries =>
2 : <CFString 0x19a830 [0x3e368630]>{contents = "type"} = <CFString 0x11d230 [0x3e368630]>{contents = "OAuthException"}
3 : <CFString 0x1f5b60 [0x3e368630]>{contents = "message"} = <CFString 0x1f8a70 [0x3e368630]>{contents = "An active access token must be used to query information about the current user."}
Я ценю помощь и очень надеюсь, что я не пропустил обсуждение здесь, которое решает эту проблему. Вот несколько (из многих), которые я прочитал и не смог найти решение
Как реализовать единый вход (SSO) с помощью Facebook ios sdk для iphone
Facebook SSO и запрос iOS SDK
Facebook API для iPhone Ошибка: должен использоваться активный токен доступа