当前位置: 首页 > 知识库问答 >
问题:

无法通过Android解析从Facebook登录获得性别

松铭
2023-03-14

我遵循了parse的教程,并根据他们的指导方针配置了我的FB开发人员帐户以及所需的包名和哈希键。在权限,我已经要求用户配置文件和电子邮件id,所以我应该得到他们的脸书id,全名,性别和电子邮件id作为脸书dcumentation。

我正在返回这个JSON。性别和电子邮件id不是以null值作为键的事件。当然,我已经覆盖了我的FB id。{“名称”:“Varun Agarwal”,“ID”:“11111111111111111”}

public void onLoginClick(View v) {
    progressDialog = ProgressDialog.show(LoginActivity.this, "", "Logging in...", true);

    List<String> permissions = Arrays.asList("public_profile", "email");
    // NOTE: for extended permissions, like "user_about_me", your app must be reviewed by the Facebook team
    // (https://developers.facebook.com/docs/facebook-login/permissions/)

    ParseFacebookUtils.logInWithReadPermissionsInBackground(this, permissions, new LogInCallback() {
      @Override
      public void done(ParseUser user, ParseException err) {
        progressDialog.dismiss();
        if (user == null) {
          Log.d(IntegratingFacebookTutorialApplication.TAG, "Uh oh. The user cancelled the Facebook login.");
        } else if (user.isNew()) {
          Log.d(IntegratingFacebookTutorialApplication.TAG, "User signed up and logged in through Facebook!");
          showUserDetailsActivity();
        } else {
          Log.d(IntegratingFacebookTutorialApplication.TAG, "User logged in through Facebook!");
          showUserDetailsActivity();
        }
      }
    });
  }

 private void makeMeRequest() {
    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
              @Override
              public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
                if (jsonObject != null) {
                  JSONObject userProfile = new JSONObject();
                    Log.d("Data", jsonObject.toString());

                  try {
                    userProfile.put("facebookId", jsonObject.getLong("id"));
                    userProfile.put("name", jsonObject.getString("name"));

                    if (jsonObject.getString("gender") != null)
                      userProfile.put("gender", jsonObject.getString("gender"));

                    if (jsonObject.getString("email") != null)
                      userProfile.put("email", jsonObject.getString("email"));

                    // Save the user profile info in a user property
                    ParseUser currentUser = ParseUser.getCurrentUser();
                    currentUser.put("profile", userProfile);
                    currentUser.saveInBackground();

                    // Show the user info
                    updateViewsWithProfileInfo();
                  } catch (JSONException e) {
                    Log.d(IntegratingFacebookTutorialApplication.TAG,
                            "Error parsing returned user data. " + e);
                  }
                } else if (graphResponse.getError() != null) {
                  switch (graphResponse.getError().getCategory()) {
                    case LOGIN_RECOVERABLE:
                      Log.d(IntegratingFacebookTutorialApplication.TAG,
                              "Authentication error: " + graphResponse.getError());
                      break;

                    case TRANSIENT:
                      Log.d(IntegratingFacebookTutorialApplication.TAG,
                              "Transient error. Try again. " + graphResponse.getError());
                      break;

                    case OTHER:
                      Log.d(IntegratingFacebookTutorialApplication.TAG,
                              "Some other error: " + graphResponse.getError());
                      break;
                  }
                }
              }
            });

    request.executeAsync();
  }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    makeMeRequest(); ---------> }

共有1个答案

朱通
2023-03-14

尝试使用graphResponse代替JSONObject。

public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) 
{
    response.getJSONObject().getString("email")
    response.getJSONObject().getString("gender")
    response.getJSONObject().getString("id")
    response.getJSONObject().getString("name")
}
 类似资料:
  • 我的密码是。 此代码总是提供用户为空。.我有使用最新的是 和是: 我还使用了Android Studio。单击按钮时调用此方法此方法为“工作”,表示facebook弹出窗口已打开,但它始终提供用户为空。此给定的is用户为空,但刷新后不为空。

  • 问题内容: 我尝试使用我从已经发布的问题的答案中读取的这些行登录我的Facebook帐户,但无论如何我都无法登录!我正在寻找一些更正代码的提示: PS:不,我不想使用Facebook API! 问题答案: 在请求中传递了许多其他参数: 并且不要忘记参数。Facebook可能会为登录请求提供某种一次性令牌,以防止绕过Facebook API。

  • 我使用解析后端。我试图将我的应用程序与Facebook集成。我下面的教程parse.com.然而,当我尝试设置登录使用Facebook,我开始有问题。在教程中,给出了这段小代码: 然而,当我在应用程序中复制这段代码时,我得到一个错误,上面写着“无法解析符号‘logInWithReadPermissionsInBackground’”。当我在Android studio中打开ParseFaceboo

  • 1. 申请应用 1.1 创建第三方授权应用 登录 Facebook 开发者中心:Facebook 开发者中心 (opens new window) 进入“我的应用”管理页面 点击“添加新应用”,在弹窗中选择“用于其他用途” 按照提示,创建应用编号 在应用详情页面,选择“Facebook 登录” 配置“Facebook 登录”的回调地址 获取Client ID和Client Secret 点击左侧菜

  • 我正在为已经使用AWS Cognito用户池的Angular2应用程序实现Facebook身份验证。 使用ngx-facebook(https://github.com/zyra/ngx-facebook),我已经设法使用Facebook和Cognito身份池验证了自己: 但现在:我如何将Facebook用户与现有的用户池集成? 登录和注册用户池的功能已经到位,最佳解决方案显然是为脸谱网用户使用现

  • 问题内容: 我的应用程序中有Facebook登录名,并且我正在圈子里奔波,试图让需要通过注册屏幕的新用户和应该直接进入应用程序的注册用户保持平衡。这是处理Facebook登录的功能(当点击按钮并获得Facebook授权时): 在上面的方框中,我基本上说的是,一旦点击Facebook登录按钮并经过Facebook授权,如果用户具有访问令牌,则直接进入应用程序。否则,请转到注册屏幕,用户将在其中输入必