ios - 如何使用 Facebook 获取用户的电子邮件?

标签 ios iphone facebook

我是 iOS 新手。我可以获取 first_name , last_name使用 loginViewFetchedUserInfo 的用户 (Facebook) FBLoginView的方法但我想知道如何获取电子邮件、生日等。

这是我的代码:

viewDidLoad

FBLoginView *loginview = [[FBLoginView alloc] init];
loginview.readPermissions=@[@"email"];
loginview.frame = CGRectOffset(loginview.frame, 5, 5);
loginview.delegate = self;

[self.view addSubview:loginview];

[loginview sizeToFit];

在此之后如何以及在哪里可以获取用户的电子邮件地址?

我浏览了很多帖子,但它们对我没有任何意义,所以请帮忙。
谢谢!

最佳答案

对于新代码 facebook SDK ver 4.0 及更高版本

看到这个link

以下

 //  use facebook SDK 3.8 

在 AppDelegate.m 中添加以下方法
 -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:  (NSString *)sourceApplication annotation:(id)annotation
{
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication  fallbackHandler:^(FBAppCall *call)
        {
            NSLog(@"Facebook handler");
        }
        ];
}


- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBAppEvents activateApp];
[FBAppCall handleDidBecomeActive];
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application
{
 [FBSession.activeSession close];
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

在您的 viewcontroler .h 中查看以下代码
#import <UIKit/UIKit.h>
#import <FacebookSDK/FacebookSDK.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<FBLoginViewDelegate>


@property (strong, nonatomic) IBOutlet UILabel *lblUserName;
@property (strong, nonatomic) IBOutlet UITextField *txtEmailId;
@property (strong, nonatomic) IBOutlet UIButton *lblCreate;
@property (strong, nonatomic) IBOutlet FBProfilePictureView *profilePic;

@property (strong, nonatomic) id<FBGraphUser> loggedInUser;

- (IBAction)butCreate:(id)sender;

- (void)showAlert:(NSString *)message
       result:(id)result
        error:(NSError *)error;

@end

//将以下代码应用到您的 View controller.m
- (void)viewDidLoad
{
[super viewDidLoad];
FBLoginView *loginview=[[FBLoginView alloc]initWithReadPermissions:@[@"email",@"user_likes"]];
loginview.frame=CGRectMake(60, 50, 200, 50);
loginview.delegate=self;
[loginview sizeToFit];
[self.view addSubview:loginview];

}

-(void)loginViewShowingLoggedInUser:(FBLoginView *)loginView
{
self.lblCreate.enabled=YES;
self.txtEmailId.enabled=YES;
self.lblUserName.enabled=YES;


}

-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user
{
self.lblUserName.text=[NSString stringWithFormat:@"%@",user.name];
self.txtEmailId.text=[user objectForKey:@"email"];
//self.profilePic.profileID=user.id;
self.loggedInUser=user;
}

-(void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView
{

self.txtEmailId.text=nil;
self.lblUserName.text=nil;
self.loggedInUser=nil;
self.lblCreate.enabled=NO;

}
-(void)loginView:(FBLoginView *)loginView handleError:(NSError *)error{
   NSLog(@"Show the Error ==%@",error);
}

Swift 1.2 及以上版本

创建字典:
class ViewController: UIViewController {
    var dict : NSDictionary!
}

获取数据:
if((FBSDKAccessToken.currentAccessToken()) != nil){
    FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
        if (error == nil){
            self.dict = result as NSDictionary               
            println(self.dict)
            NSLog(self.dict.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as String)
        }
    })
}

输出应该是:
{
    email = "karthik.saral@gmail.com";
    "first_name" = Karthi;
    id = 924483474253864;
    "last_name" = keyan;
    name = "karthi keyan";
    picture =     {
        data =         {
            "is_silhouette" = 0;
            url = "XXXXXXX";
        };
    };
}

关于ios - 如何使用 Facebook 获取用户的电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19563158/

相关文章:

ios - 由于流优化,值暂时不可用

ios - 如何在普通 TextView 中使用 Swift Playgrounds 风格的代码输入键盘/文本字段?

iphone - 通过 Bonjure Logic 问题可靠地发送大文件

iphone - 在没有 iPhone 的情况下测试 iPhone 应用程序

php - Facebook 如何记住我的密码?

ios - 无法删除 UIButtons 和标签。

ios - UNNotificationAction 未显示在远程通知中

iphone - 不存在企业或临时部署的保存

iphone - MotionBegan 没有在整个应用程序中被调用

ios - 如何像 facebook 应用程序一样快速滑动错误消息?