2012-04-25 22 views
7

Próbuję uzyskać dostęp do niektórych informacji o użytkowniku, w tym wiadomości e-mail. Do tego celu używam Graph API zadzwonić ta metoda:Facebook iOS SDK nie zwraca użytkownika e-mail

[facebook requestWithGraphPath:@"me" andDelegate:self]; 

Zwraca informację o użytkowniku, bez informacji e-mail (dzień urodzin jest również brakuje). Ustawiłem wszystkie uprawnienia i przetestowałem więcej niż jedno konto (z wiadomością e-mail i urodzin jako informacją publiczną) i zaakceptowałem wszystkie żądania okna dialogowego.

Oto moja startowych:

if(!facebook) { 
    facebook = [[Facebook alloc] initWithAppId:[self _APP_KEY] andDelegate:self]; 
    NSArray *array = [NSArray arrayWithObjects: @"email", @"user_birthday", @"publish_stream", @"offline_access", nil]; 
    [self setPermissions:array]; 
} 

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:permissions]; 
} 
else { 
    [self getUserInfo]; 
} 

Identyfikator logowania zwrotna:

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

    [self getUserInfo]; 
} 

Sposób getUserInfo:

- (void) getUserInfo { 
    [facebook requestWithGraphPath:@"me" andDelegate:self]; 
} 

Żądanie oddzwonienia:

- (void)request:(FBRequest *)request didLoad:(id)result { 

    if ([result isKindOfClass:[NSDictionary class]]) { 
     NSDictionary* json = result; 
     NSLog(@"-> %@", json); 
    } 
} 

Wynik jest następujący:

-> { 
    "first_name" = EDITED (my name); 
    gender = male; 
    hometown =  { 
     id = 111072692249998; 
     name = "Porto Alegre"; 
    }; 
    id = 653099452; 
    languages =  (
       { 
      id = 104034306299811; 
      name = "Brazilian Portuguese"; 
     }, 
       { 
      id = 106059522759137; 
      name = English; 
     } 
    ); 
    "last_name" = EDITED (my last name); 
    link = EDITED (my profile); 
    locale = "en_US"; 
    location =  { 
     id = 112047398814697; 
     name = "S\U00e3o Paulo, Brazil"; 
    }; 
    name = EDITED (my name); 
    timezone = "-3"; 
    "updated_time" = "2012-04-25T13:36:51+0000"; 
    verified = 1; 
} 

Jak widać, nie ma informacji na temat e-mail użytkownika. Czy brakuje mi jakiegoś kroku? Wszelkie idei?

Dzięki z góry

+1

żadna z tych odpowiedzi działa? czy oni? Musisz wybrać poprawną odpowiedź tutaj, aby zapewnić korzyści innym użytkownikom. – Dobler

Odpowiedz

7

Spróbuj skorzystać z tej, to działa w moim przypadku

facebook = [[Przypisanie Facebooka] initWithAppId: [self _APP_KEY] i Usuń: self]; [autoryzacja na Facebooku: [NSArray arrayWithObjects: @ "email", nil]];

0

może uzyskać dostęp tylko e-mail użytkownik, jeśli masz autoryzacji użytkownika dla niego.

Publiczny wykres nie dostarcza tych informacji.

Należy przeczytać: https://developers.facebook.com/docs/guides/web/#login

+0

ten przewodnik jest dla api internetowej. Pytanie dotyczy dostępu z ios sdk – Dobler

1

można dostać e-mail użytkownika tak ..po fbDidlogin opalanych wywołanie tej metody

- (void)fetchUserDetails { 
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            @"SELECT uid, name, pic, email FROM user WHERE uid=me()", @"query",nil]; 

    [fb requestWithMethodName:@"fql.query" 
            andParams:params 
           andHttpMethod:@"POST" 
            andDelegate:self]; 
} 

aw request:(FBRequest *)request didLoad zrobisz coś takiego:

- (void)request:(FBRequest *)request didLoad:(id)result 
{ 

    if([request.url rangeOfString:@"fql.query"].location !=NSNotFound) 
    { 
     if ([result isKindOfClass:[NSArray class]] && [result count]>0) { 
      result = [result objectAtIndex:0]; 
     } 

     if ([result objectForKey:@"email"]) { 

      NSLog(@"%@",[result objectForKey:@"email"]); 
      } 
     } 
} 

zapraszam :)

0

trzeba prosić o pozwolenie użytkownikowi na tej informacji poprzez:

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 
NSArray *permissions = [[NSArray alloc] initWithObjects: 
         @"user_birthday", 
         nil]; 
return [FBSession openActiveSessionWithPermissions:permissions 
             allowLoginUI:allowLoginUI 
           completionHandler:^(FBSession *session, 
                FBSessionState state, 
                NSError *error) { 
            [self sessionStateChanged:session 
                 state:state 
                 error:error]; 
           }]; 

}

Oto wszystkie informacje, których potrzebujesz, wystarczy wykonać tę tutoriale

Pierwszy, ten : Facebook Login

A następnie ten: Fetch user data

3

Wypróbuj te uprawnień = [[NSArray alloc] initWithObjects: @ "offline_access", @ "email", nil];

1

1) Daj pozwolenie, aby uzyskać e-mail i informacje etc ...

// You must ALWAYS ask for public_profile permissions when opening a session 
       [FBSession openActiveSessionWithReadPermissions:@[@"public_profile",@"user_videos",@"email"] 
                allowLoginUI:YES 
               completionHandler: 
       ^(FBSession *session, FBSessionState state, NSError *error) 
       { 
        // Retrieve the app delegate 
        AppDelegate* appDelegate = [UIApplication sharedApplication].delegate; 
        // Call the app delegate's sessionStateChanged:state:error method to handle session state changes 
        [appDelegate sessionStateChanged:session state:state error:error]; 
       }]; 

2) aby uzyskać Email gdzie chcesz ...

if (FBSession.activeSession.isOpen) 
    { 
     [[FBRequest requestForMe] startWithCompletionHandler: 
     ^(FBRequestConnection *connection, 
      NSDictionary<FBGraphUser> *user, 
      NSError *error) 
     { 
      if (!error) 
      { 
       NSString *userEmail = [user objectForKey:@"email"]; 
      } 
      [tblSettingVw reloadData]; 
     }]; 
    } 

Uwaga: Słownik użytkownika powróci po

{ 
    "first_name" =; 
    gender =; 
    id =; 
    "last_name" =; 
    link = ""; 
    locale = ""; 
    name = ""; 
    timezone = ""; 
    "updated_time" = ""; 
    verified = ; 
} 
1

Wszystkie konta facebook, które są weryfikowane przez numer telefonu zamiast e-mail dostanie NULL dla [user objectForKey:@"email"]

Powiązane problemy