何らかの理由で、Facebook は、ユーザーの認証に成功した後に返されるユーザー JSON でユーザーの電子メールを返さなくなりました。
FacebookSDK for iOS を v3.6 から v3.8 にアップグレードしましたが、運が悪かったです。数週間前まではすべて正常に機能していましたが、現在は機能していません。メールだけで、他のすべてのプロパティ、つまりDOBは問題なく戻ってきます。Facebook はアクセス許可システムを変更し続けていますが、最近の変更が原因である可能性があることを私は知りません。任意のポインタをいただければ幸いです。
ところで、有効な電子メールが関連付けられている自分の FB アカウントで認証しようとしていますが、最近プライバシー設定も変更していません。
また、Facebook のプライバシー設定からアプリを削除して再認証しようとしましたが、それでもうまくいきません。コードは次のとおりです。
[FBSession openActiveSessionWithReadPermissions:@[@"user_about_me", @"user_location", @"user_birthday", @"email"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
switch (status) {
case FBSessionStateOpen: {
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
NSLog(@"User Data: %@", user); //no email in the json
NSString *email = user[@"email"]; //obviously returns nil
//rest of the code
}];
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
}];
正しく構成したことを明確に示す Facebook アプリのアクセス許可ページのスクリーンショット:
API コールバックで返されるユーザー JSON を次に示します (個人情報は削除しました)。
{
bio = "My Bio";
birthday = "01/01/1900";
"first_name" = FN;
gender = male;
id = 00000000;
"last_name" = LN;
link = "https://www.facebook.com/FBName";
locale = "en";
location = {
id = 11111111111111111;
name = "City Name";
};
name = "FN LN";
quotes = "";
timezone = "0";
"updated_time" = "2000-00-07T00:00:21+0000";
username = USERNAME;
verified = 1;
}