代码之家  ›  专栏  ›  技术社区  ›  Yas Tabasam Denys

Facebook Graph API停止发送用户电子邮件

  •  4
  • Yas Tabasam Denys  · 技术社区  · 11 年前

    出于某种原因,Facebook停止在成功验证用户后返回的用户JSON中返回用户电子邮件。

    我甚至在没有任何运气的情况下将iOS版的FacebookSDK从v3.6升级到了v3.8。直到几周前,一切都很顺利,但现在已经不行了。这只是一封电子邮件,所有其他财产(即DOB)都很好地回来了。脸书一直在改变他们的权限系统,但我不知道最近有什么变化会导致这种情况。任何指示都将不胜感激。

    顺便说一句,我正在尝试使用我自己的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应用程序权限页面的截图清楚地表明我已经正确配置了它:

    enter image description here

    这是我在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;
    }
    
    1 回复  |  直到 11 年前
        1
  •  5
  •   Yas Tabasam    11 年前

    事实证明,如果与Facebook帐户关联的主电子邮件已被停用、禁用或删除,则当您进行图形调用时,Facebook不会返回用户电子邮件。

    如果你长时间不访问你的电子邮件地址,就会发生这种情况。当他们发到你主要地址的电子邮件开始反弹时,脸书可能会发现这一点。

    使其再次发挥作用的步骤:

    1. 请确保您能够登录到您的电子邮件帐户,并且 脸书的电子邮件不会被退回。

    2. 登录Facebook并将您的主要电子邮件地址更改为 其他电子邮件。

    3. Facebook将向您的新电子邮件地址发送一封验证电子邮件, 打开此电子邮件并单击验证链接。

    4. 重新登录Facebook并将您的主电子邮件再次更改为 以前的电子邮件地址。

    5. Facebook将向该电子邮件地址发送验证电子邮件, 请打开它并点击它以验证您的电子邮件。

    6. 等上几个小时,再试一次viola,你的电子邮件会 开始出现在json中。