Атрыманне звестак пра карыстальніка з Facebook у прашыўцы

Я пачатковец у распрацоўцы iPhone. Я раблю дадатак, у якім карыстальнік мае 2 ўваходу праз Facebook пасля таго, як ён сцвярджае, яго паўнамоцтвы і націскае на кнопку Уваход, я павінен атрымліваць дадзеныя, як імя, адрас электроннай пошты і падлогі з Facebook і пасля загрузкі карыстальнік павінен быць накіраваны на старонку рэгістрацыі прыкладання з дэталлю запоўненая, і мне трэба гэта дадатак, каб быць сумяшчальнымі для iPhone 4,4s і 5.

Я паспрабаваў зрабіць гэта з дапамогай API Facebook Graph, але не змог атрымаць яго, так што хто-то можа дапамагчы мне.

Загадзя дзякую.

12
Сардэчна запрашаем на SO. Вы павінны адправіць тое, што вы ўжо спрабавалі. Мы паспрабуем вам дапамагчы, але толькі пасля таго, як вы паказалі, што вы паклалі, па меншай меры некаторы высілак у яго.
дададзена аўтар Steve P., крыніца

7 адказы

Вы можаце зрабіць гэта, выкарыстоўваючы наступны код:

[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
                                   allowLoginUI:YES
                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {

                                  switch (state) {
                                      case FBSessionStateOpen:
                                          [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary *user, NSError *error) {
                                              if (error) {
                                               NSLog(@"error:%@",error);                                               
                                              }
                                              else
                                              {                                                   
                                                 //retrive user's details at here as shown below
                                                  NSLog(@"FB user first name:%@",user.first_name);
                                                  NSLog(@"FB user last name:%@",user.last_name);
                                                  NSLog(@"FB user birthday:%@",user.birthday);
                                                  NSLog(@"FB user location:%@",user.location);
                                                  NSLog(@"FB user username:%@",user.username);
                                                  NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]);
                                                  NSLog(@"email id:%@",[user objectForKey:@"email"]);
                                                  NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n",
                                                                         user.location[@"name"]]);

                                              }
                                          }];
                                          break;

                                      case FBSessionStateClosed:
                                      case FBSessionStateClosedLoginFailed:
                                          [FBSession.activeSession closeAndClearTokenInformation];
                                          break;

                                      default:
                                          break;
                                  }

                              } ];

і не забыў імпартаваць FacebookSDK/FacebookSDK.h у кодзе.

EDIT : Update for Facebook SDK v4 (23 April,2015)

Цяпер Faceboook выпусцілі новы SDK з асноўнымі зменамі. У якім FBSession клас з'яўляецца састарэлым. Такім чынам, усе карыстальнікі прапанавалі перайсці на новы SDK і API.

Ніжэй я ўжо згадваў, як мы можам атрымаць інфармацыю пра карыстальніка праз Facebook SDK v4:

if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
  if (!error) {
     NSLog(@”fetched user:%@”, result);
  }
 }];
}

Але перш, чым забіраць дадзеныя карыстальніка, мы павінны інтэграваць новы ўліковы запіс Facebook у кодзе, як апісана ў раздзеле дакументацыі тут </а>.Here is the Changelog for SDK v4. I suggest going through it for being updated.

18
дададзена
Выкарыстоўвайце /мне і запоўніць Параметры пададзена {@ "палёў": @ "ід, імя, адрас электроннай пошты"} .
дададзена аўтар Sauvik Dolui, крыніца
як атрымаць карыстацкі нумар тэлефона?
дададзена аўтар Muruganandham K, крыніца
@RamaniAshish: Гэта можа быць звязана з пытаннем дазволу. Для таго, каб завяршыць інтэграцыю Facebook, мы павінны мець працоўнае прыкладанне ў FB распрацоўніка. Калі мы спрабуем выкарыстоўваць дадзеныя ўліковага запісу карыстальніка, ён павінен даць дазвол на доступ да яго/яе дэталі. пераканайцеся, што ўсе гэта ўсё адбываецца зусім. Гэта павінна працаваць у якасці працоўных для многіх іншых, у тым ліку мяне :)
дададзена аўтар astuter, крыніца
яна заўсёды ідзе ў FBSessionStateClosedLoginFailed ... Чаму ...?
дададзена аўтар Brainstorm Technolabs, крыніца
я ўжо стварае прыкладанне ў fbdeveloper.
дададзена аўтар Brainstorm Technolabs, крыніца

Дадаць файл info.plist:

enter image description here

  - (IBAction)btn_fb:(id)sender
    {
      if (!FBSession.activeSession.isOpen)
            {
                NSArray *_fbPermissions =    @[@"email",@"publish_actions",@"public_profile",@"user_hometown",@"user_birthday",@"user_about_me",@"user_friends",@"user_photos",];

        [FBSession openActiveSessionWithReadPermissions:_fbPermissions allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState state, NSError *error)
         {
             if (error)
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                 [alertView show];
             }
             else if(session.isOpen)
             {
                 [self btn_fb:sender];
             }


         }];


        return;
    }


    [FBRequestConnection startWithGraphPath:@"me" parameters:[NSDictionary dictionaryWithObject:@"cover,picture.type(large),id,name,first_name,last_name,gender,birthday,email,location,hometown,bio,photos" forKey:@"fields"] HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
     {
         {
             if (!error)
             {
                 if ([result isKindOfClass:[NSDictionary class]])
                 {
                     NSLog(@"%@",result);

                 }
             }
         }
     }];
}
3
дададзена
FBRequest *request = [FBRequest requestForMe];
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    if (!error) {
       //handle successful response
    } else if ([error.userInfo[FBErrorParsedJSONResponseKey][@"body"][@"error"][@"type"] isEqualToString:@"OAuthException"]) {//Since the request failed, we can check if it was due to an invalid session
        NSLog(@"The facebook session was invalidated");
        [self logoutButtonTouchHandler:nil];
    } else {
        NSLog(@"Some other error: %@", error);
    }
}];
1
дададзена

Вы павінны выкарыстоўваць шлях графа, каб атрымаць інфармацыю карыстальніка.

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

- (void)openSession
{
 if (internetActive) {
  NSArray *permissions=[NSArray arrayWithObjects:@"read_stream",@"email",nil];

  [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:
   ^(FBSession *session,
   FBSessionState state, NSError *error) {
   [self sessionStateChanged:session state:state error:error];
  }];
 }else
 {
  UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" message:@"Internet Not Connected" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
  [alert show];
 }
}

#pragma mark- request delegate methods 

- (void)request:(FBRequest *)request didLoad:(id)result
{
  NSLog(@"request did load successfully....");

//  __block NSDictionary *dictionary=[[NSDictionary alloc] init];

 if ([result isKindOfClass:[NSDictionary class]]) {
  NSDictionary* json = result;

  NSLog(@"email id is %@",[json valueForKey:@"email"]);
  NSLog(@"json is %@",json);

  [[NSUserDefaults standardUserDefaults] setValue:[json valueForKey:@"email"] forKey:@"fbemail"];
  [self.viewController login:YES];
 }
}

- (void)request:(FBRequest *)request didFailWithError:(NSError *)error
{
 UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"" message:@"Server not responding.." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];

 [alertView show];

 [self fblogout];
 [self showLoginView];
 NSLog(@"request did fail with error");
}


- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
 switch (state) {
  case FBSessionStateOpen: {
      //state open action
  }

  //Initiate a Facebook instance
   facebook = [[Facebook alloc]
                    initWithAppId:FBSession.activeSession.appID
                    andDelegate:nil];

  //Store the Facebook session information
   facebook.accessToken = FBSession.activeSession.accessToken;
   facebook.expirationDate = FBSession.activeSession.expirationDate;

   if (![[NSUserDefaults standardUserDefaults] valueForKey:@"fbemail"]) {
    [MBProgressHUD showHUDAddedTo:self.viewController.view animated:YES];
    [self getEmailId];
   }

   break;
  case FBSessionStateClosed:
  case FBSessionStateClosedLoginFailed:
  //Once the user has logged in, we want them to
  //be looking at the root view.
   [self.navController popToRootViewControllerAnimated:NO];

   [FBSession.activeSession closeAndClearTokenInformation];
   facebook = nil;

   [self showLoginView];
   break;
  default:
   break;
 }

 [[NSNotificationCenter defaultCenter]
  postNotificationName:FBSessionStateChangedNotification
  object:session];

 if (error) {
  UIAlertView *alertView = [[UIAlertView alloc]
                            initWithTitle:@"Error"
                            message:error.localizedDescription
                            delegate:nil
                            cancelButtonTitle:@"OK"
                            otherButtonTitles:nil];
  [alertView show];
 }
}
1
дададзена
1
дададзена

Выкарыстоўвайце API FBConnect для здабывання information.its карыстальнікаў простая ў выкарыстанні

Fbconnect API

Спадзяюся, што гэта працуе для вас :)

1
дададзена

Facebook мае ў цяперашні час абнавіў свой SDK версію 4.x. Для здабывання інфармацыі профілю карыстальніка вам трэба будзе відавочна выклікаць граф API пасля аўтарызацыі поспеху (<�моцнага> прасіць неабходныя дазволу ).

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/me"
           parameters:@{ @"fields": @"id,name,email"}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
   //Insert your code here
}];
0
дададзена