アプリをFacebook-iOS-SDK-4.にアップグレードしていますが、ユーザー名、ユーザーIDなどしか提供しないため、FBSDKProfile
からユーザーのメールを取得できないようです。
電子メールを取得するには、グラフAPIを利用する必要があります。具体的には、必要なフィールドが入力されたパラメーターフィールドを提供します。 FacebookのGraph API探索ツールをご覧ください。クエリツールは、クエリの把握に役立ちます。 https://developers.facebook.com/tools/Explorer
メールを取得するために働いたコードは次のとおりです。これは、すでにログインしていることを前提としています。
NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
[parameters setValue:@"id,name,email" forKey:@"fields"];
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result, NSError *error) {
aHandler(result, error);
}];
そのとおりです。 EBSDアドレスはFBSDKProfileオブジェクトに存在しません。代わりにFBのGraph APIを使用する必要があります。 FB Developerサイトには多くの情報とコードのサンプルがあります https://developers.facebook.com/docs/ios/graph
質問に答えるには、次のようなものを試してください。
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"user:%@", result);
}
}];
}
修正されたコード:
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
}
}];
}
このコードを試してください:
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
} else if (result.isCancelled) {
// Handle cancellations
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if ([result.grantedPermissions containsObject:@"email"]) {
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
}
}];
}
}
}
}];
これらのパラメーターは、電子メールを提供します
NSDictionary *parameters = @{@"fields":@"email"};
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
NSLog(@"fetched user:%@", result);
}];
graph API v2.4以降、/ meのGETリクエストには明示的な「フィールド」パラメータが含まれている必要があります
Facebook開発者サイトから https://developers.facebook.com/docs/facebook-login/permissions/v2.2
電子メールの許可を要求した場合でも、電子メールアドレスを取得できるとは限りません。たとえば、誰かが電子メールアドレスではなく電話番号を使用してFacebookにサインアップした場合、電子メールフィールドは空になることがあります。
それが誰かを助けることを願っています:)
私が見つけたものでこれに追加したかった。私のFBSDKGraphRequest
については、ログイン時に要求していた権限をフィールドとして渡そうとしました。だから私はfields
を次のように設定していました:
"email,user_location"
ただし、権限とフィールドは異なります。参照用に、これらはフィールドです: https://developers.facebook.com/docs/graph-api/reference/v2.4/user
したがって、あなたが渡したいリンクに基づいて:
"email,location"
それが誰かを助けることを願っています!
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
}
}];
}