Я создаю приложение facebook. Я внедрил логин, используя класс FBSDKLoginManager. В первый раз, когда я вхожу в facebook, блок успеха возвращает объект FBSDKLoginManagerLoginResult, который содержит объект токена доступа (объект FBSDKAccessToken), который используется для совместного использования. Но в второй раз (после перезапуска приложения), когда я пытаюсь получить токен доступа, используя функцию [FBSDKAccessToken currentAccessToken] return no. Итак, как получить токен доступа (объект FBSDKAccessToken) второй раз без входа в facebook снова.
Не удалось получить токен доступа через [FBSDKAccessToken currentAccessToken] в iphone sdk
Ответ 1
Попробуйте этот код. Основано на версии SDK версии 4.0
AppDalegate.m
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
ViewController.m
- (IBAction)btnFacebookPressed:(id)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
// Process error
}
else if (result.isCancelled)
{
// Handle cancellations
}
else
{
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"result is:%@",result);
[self fetchUserInfo];
}
}
}];
}
-(void)fetchUserInfo
{
if ([FBSDKAccessToken currentAccessToken])
{
NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error)
{
NSLog(@"resultis:%@",result);
}
else
{
NSLog(@"Error %@",error);
}
}];
}
}
viewDidLoad
вызов этого метода, вы получаете токен доступа после входа в систему
[self fetchUserInfo];
Ответ 2
Вам нужно позвонить
[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]
До
[FBSDKAccessToken currentAccessToken]
Ответ 3
Попробуйте этот код. Основываясь на Facebook SDK версии 6.0 и выше
- (IBAction)fbIntegration:(id)sender
{
FBSDKLoginManager *loginmanager = [[FBSDKLoginManager alloc] init];
[loginmanager logInWithReadPermissions:@[@"email",@"public_profile"] fromViewController:Nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
// Process error
NSLog(@"======error%@",error);
}
else if (result.isCancelled)
{
// Handle cancellations
NSLog(@"canceled");
}
else
{
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"result is:%@",result);
[self fetchUserInfo];
}
}
}];
}
-(void)fetchUserInfo
{
if ([FBSDKAccessToken currentAccessToken])
{
NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error)
{
NSLog(@"%@",connection);
}
else
{
NSLog(@"Error %@",error);
}
}];
}
}
надеюсь, что это поможет другим.
Ответ 4
Если вы пытаетесь использовать свое приложение на симуляторе, попробуйте использовать реальное устройство, потому что у симулятора ошибка пользователя по умолчанию.
Falling back to loading access token from NSUserDefaults because of simulator bug