2016-05-21 5 views
0

Facebookで提供されたinstructionsに続いて、自分のアプリに「Facebookでログイン」ボタンを追加しました。追加のView Controllerを実装するには、名前や電子メールなどのログインしたユーザーからデータを取得する必要があります。しかし、このデータにアクセスする方法はないようです。Facebookのログインユーザーデータの表示と使用

参考までに、以下のコードはFacebookの指示から直接貼り付けられます。

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; 
loginButton.center = self.view.center; 
loginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"]; 
[self.view addSubview:loginButton]; 

ご協力いただきまして誠にありがとうございます。ありがとう!

は、私はすでにそれをチェックし、それは私のために正常に動作します:あなたはカスタムFacebookのボタンを使用している場合

+0

データにアクセスするコードはどこですか?あなたはdocsとapiリファレンスをチェックアウトしましたか?このためのコード例があります。また、変更ログの「宣言フィールド」についても読んでください。 – luschn

+0

はい - データにアクセスするコードはまさに私が求めているものです。私はここに "宣言フィールド"が見つかりましたが、正確には関連していないようです:https://developers.facebook.com/docs/apps/changelog – daspianist

+0

公式のドキュメントにあるすべてのAPIエンドポイントのサンプルコードがあります。 APIリファレンスを出してください。宣言型フィールドは確実に関連していますが、宣言型フィールドを持たないIDと名前しか取得できません。 – luschn

答えて

1

それからちょうどボタンアクションでコードの下に呼び出します。 参照ください:fbResultDataで

-(void)FBLogin{ 
NSMutableDictionary *fbResultData; 
fbResultData =[[NSMutableDictionary alloc]init]; 
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    if (error) { 
     NSLog(@"Process error"); 
    } else if (result.isCancelled) { 
     NSLog(@"Cancelled"); 
    } else { 
     NSLog(@"Logged in"); 
     if ([FBSDKAccessToken currentAccessToken]) 
     { 
      [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,age_range,birthday,devices,email,gender,last_name,family,friends,location,picture" parameters:nil] 
       startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
        if (!error) { 
         NSString * accessToken = [[FBSDKAccessToken currentAccessToken] tokenString]; 
         NSLog(@"fetched user:%@ ,%@", result,accessToken); 
         if ([result objectForKey:@"email"]) { 
          [fbResultData setObject:[result objectForKey:@"email"] forKey:@"email"]; 
         } 
         if ([result objectForKey:@"gender"]) { 
          [fbResultData setObject:[result objectForKey:@"gender"] forKey:@"gender"]; 
         } 
         if ([result objectForKey:@"name"]) { 
          NSArray *arrName; 
          arrName=[[result objectForKey:@"name"] componentsSeparatedByString:@" "]; 

          [fbResultData setObject:[arrName objectAtIndex:0] forKey:@"name"]; 
         } 
         if ([result objectForKey:@"last_name"]) { 
          [fbResultData setObject:[result objectForKey:@"last_name"] forKey:@"last_name"]; 
         } 
         if ([result objectForKey:@"id"]) { 
          [fbResultData setObject:[result objectForKey:@"id"] forKey:@"id"]; 
         } 
         [fbResultData setObject:accessToken forKey:@"Access Token"]; //m 
         FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
                initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"] 
                parameters:nil 
                HTTPMethod:@"GET"]; 
         [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, 
                  id result, 
                  NSError *error) { 
          if (!error){ 
           if ([[result objectForKey:@"data"] objectForKey:@"url"]) { 
            [fbResultData setObject:[[result objectForKey:@"data"] objectForKey:@"url"] forKey:@"picture"]; 
           } 
           NSLog(@"Final data of FB login********%@",fbResultData); 
          } }]; 
        } 
        else { 
         NSLog(@"result: %@",[error description]); 
         UIAlertController *alert=[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", nil) message:[error description] preferredStyle:UIAlertControllerStyleAlert]; 
         UIAlertAction *alertBtnOk=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) 
               { 
                [alert dismissViewControllerAnimated:YES completion:nil]; 
               }]; 
         [alert addAction:alertBtnOk]; 
         [self presentViewController:alert animated:YES completion:nil]; 
        } 
       }]; 
     } 
     else{ 
      [[FBSDKLoginManager new] logOut]; 
     } 
    } 
}];} 

を、あなたは、すべてのユーザーデータを取得しますが、これらのファイルをインポートすることを忘れないでください:

#import <FBSDKCoreKit/FBSDKCoreKit.h> 
#import <FBSDKLoginKit/FBSDKLoginKit.h> 
+0

恐ろしい - カスタムボタンが手に入る方法です。すぐに結果を報告します。 – daspianist

+0

OK、あなたの答えを待ちます。 – Mayank

+0

素晴らしい作品 - Thanks Mayank! – daspianist

1

このコードは、Facebookのログインユーザデータを取得するために有用であり、彼の/あなたのアプリを使用していない友人のリスト:

-(void)FBLogin{ 
NSMutableDictionary *fbResultData; 
fbResultData =[[NSMutableDictionary alloc]init]; 
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    if (error) { 
     NSLog(@"Process error"); 
    } else if (result.isCancelled) { 
     NSLog(@"Cancelled"); 
    } else { 
     NSLog(@"Logged in"); 
     if ([FBSDKAccessToken currentAccessToken]) 
     { 
      [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,age_range,birthday,devices,email,gender,last_name,family,invitable_friends,location,picture" parameters:nil] 
      startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
       if (!error) { 
        NSString * accessToken = [[FBSDKAccessToken currentAccessToken] tokenString]; 
        NSLog(@"fetched user:%@ ,%@", result,accessToken); 
        if ([result objectForKey:@"email"]) { 
         [fbResultData setObject:[result objectForKey:@"email"] forKey:@"email"]; 
        } 
        if ([result objectForKey:@"gender"]) { 
         [fbResultData setObject:[result objectForKey:@"gender"] forKey:@"gender"]; 
        } 
        if ([result objectForKey:@"name"]) { 
         NSArray *arrName; 
         arrName=[[result objectForKey:@"name"] componentsSeparatedByString:@" "]; 

         [fbResultData setObject:[arrName objectAtIndex:0] forKey:@"name"]; 
        } 
        if ([result objectForKey:@"last_name"]) { 
         [fbResultData setObject:[result objectForKey:@"last_name"] forKey:@"last_name"]; 
        } 
        if ([result objectForKey:@"id"]) { 
         [fbResultData setObject:[result objectForKey:@"id"] forKey:@"id"]; 
        } 
        [fbResultData setObject:accessToken forKey:@"Access Token"]; //m 
        FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
                initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"] 
                parameters:nil 
                HTTPMethod:@"GET"]; 
        [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, 
                  id result, 
                  NSError *error) { 
         if (!error){ 
          if ([[result objectForKey:@"data"] objectForKey:@"url"]) { 
           [fbResultData setObject:[[result objectForKey:@"data"] objectForKey:@"url"] forKey:@"picture"]; 
          } 
          NSLog(@"Final data of FB login********%@",fbResultData); 
         } }]; 
       } 
       else { 
        NSLog(@"result: %@",[error description]); 
        UIAlertController *alert=[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", nil) message:[error description] preferredStyle:UIAlertControllerStyleAlert]; 
        UIAlertAction *alertBtnOk=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) 
               { 
                [alert dismissViewControllerAnimated:YES completion:nil]; 
               }]; 
        [alert addAction:alertBtnOk]; 
        [self presentViewController:alert animated:YES completion:nil]; 
       } 
      }]; 
     } 
     else{ 
      [[FBSDKLoginManager new] logOut]; 
     } 
    } 
}];} 
関連する問題