You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin中AWS Cognito集成Facebook认证后无法获取用户邮箱

解决Xamarin Android中Facebook登录后获取用户邮箱的问题

我之前也碰到过一模一样的情况!你已经成功走完登录流程拿到了Facebook的AccessToken,但邮箱这类用户个人信息并不会直接包含在AccessToken里,必须通过Facebook的Graph API主动请求才能获取。以下是具体的解决步骤和代码修改方案:

核心思路

登录成功后,利用拿到的AccessToken发起Graph API请求,明确指定要获取的用户字段(比如email、name),然后从返回结果中提取邮箱信息。

修改你的登录回调代码

在HandleSuccess方法中添加Graph API请求的逻辑,替换/补充你现有的代码:

HandleSuccess = loginResult => {
    string userID;
    var accessToken = loginResult.AccessToken;
    userID = accessToken.UserId;
    var permissions = accessToken.Permissions;

    // 先检查用户是否授权了email权限
    if (!permissions.Contains("email")) {
        // 如果没授权,可以引导用户重新请求邮箱权限
        LoginManager.Instance.LogInWithReadPermissions(_activity, new List<string> { "email" });
        return;
    }

    // 发起Graph API请求,获取用户邮箱等信息
    var request = GraphRequest.NewMeRequest(accessToken, (obj, response) => {
        if (response.Error == null) {
            // 解析返回的用户数据
            var userData = obj as Java.Util.HashMap; // 或者用JSONObject,根据实际返回类型调整
            string email = userData.Get("email")?.ToString();
            string userName = userData.Get("name")?.ToString();

            // 这里可以将邮箱存入你的数据库,或者同步到Amazon Cognito
            if (!string.IsNullOrEmpty(email)) {
                // 示例:调用你的数据库存储方法
                // SaveEmailToDatabase(email, userID);
                // 也可以把邮箱传递给之前的AuthSuccess方法
                App.OnFacebookAuthSuccess(accessToken.Token, email);
            }
        } else {
            // 处理Graph API请求错误
            App.OnFacebookAuthFailed();
        }
    });

    // 必须明确指定要获取的字段,默认返回的字段很少
    var parameters = new Android.OS.Bundle();
    parameters.PutString("fields", "id,name,email");
    request.Parameters = parameters;
    request.ExecuteAsync();
},

关键注意点

  • 指定请求字段:Graph API默认只返回id和name,必须通过fields参数明确指定email才能获取到邮箱。
  • 权限检查:先确认用户确实授权了email权限,如果没授权,需要重新发起权限请求,避免Graph API返回空的邮箱字段。
  • 数据解析:返回的用户数据是Java的HashMap或者JSONObject,根据Xamarin的绑定情况调整解析方式。

这样修改后,你就能成功获取到用户的邮箱,然后存入你的数据库或者同步到Amazon Cognito了。

内容的提问来源于stack exchange,提问作者maria nabil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:03:52