Facebook的iOS SDK没有返回用户的电子邮件
我想要访问一些用户的信息,包括电子邮件。为此,我使用图形API来调用这个方法:Facebook的iOS SDK没有返回用户的电子邮件
[facebook requestWithGraphPath:@"me" andDelegate:self];
它返回的用户信息,而电子邮件信息(生日也丢失)。我设置了所有权限并使用多个帐户(其中包含电子邮件和生日作为公共信息)进行测试,并接受了所有对话的请求。
这里是我的init:
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];
}
登录回调:
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
[self getUserInfo];
}
的getUserInfo方法:
- (void) getUserInfo {
[facebook requestWithGraphPath:@"me" andDelegate:self];
}
请求回调:
- (void)request:(FBRequest *)request didLoad:(id)result {
if ([result isKindOfClass:[NSDictionary class]]) {
NSDictionary* json = result;
NSLog(@"-> %@", json);
}
}
结果如下:
-> {
"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;
}
正如你所看到的,没有关于该用户的电子邮件信息。我错过了一些步骤?任何意识?
在此先感谢
尝试使用此,它的作品在我的情况
facebook = [[Facebook alloc] initWithAppId:[self _APP_KEY] andDelegate:self]; [facebook授权:[NSArray arrayWithObjects:@“email”,nil]];
你可以得到用户的电子邮件这样的..后fbDidlogin解雇调用此方法
- (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];
}
,并在request:(FBRequest *)request didLoad
,你会做这样的事情:
- (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"]);
}
}
}
享受:)
您需要通过请求允许用户输入以下信息:
- (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];
}];
}
这里有您需要的所有信息,只要按照这个教程
首先,这一个:Facebook Login
然后,这一个:Fetch user data
试试这个 permissions = [[NSArray alloc] initWithObjects:@“offline_access”,@“email”,nil];
1)给获得电子邮件和信息等方面的权限...
// 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),以获得您想要的电子邮件...
if (FBSession.activeSession.isOpen)
{
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error)
{
if (!error)
{
NSString *userEmail = [user objectForKey:@"email"];
}
[tblSettingVw reloadData];
}];
}
注:用户词典将返回以下内容
{
"first_name" =;
gender =;
id =;
"last_name" =;
link = "";
locale = "";
name = "";
timezone = "";
"updated_time" = "";
verified = ;
}
它们通过电话号码,而不是电子邮件验证将获得NULL
为[user objectForKey:@"email"]
以上答案都不对工作的所有Facebook账户?或者他们?为了其他用户的利益,您应该选择正确的答案。 – Dobler 2012-08-11 04:36:10