Facebook的Android SDK没有电子邮件,甚至经过许可

问题描述:

我想通过Facebook应用程序获取用户电子邮件。但它总是返回空。我甚至给出了所需的权限。应用程序还会显示应用程序将向用户发送电子邮件等的消息。Facebook的Android SDK没有电子邮件,甚至经过许可

public class MainActivity extends AppCompatActivity { 

private TextView info; 
private LoginButton loginButton; 
private CallbackManager callbackManager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (BuildConfig.DEBUG) { 
     FacebookSdk.setIsDebugEnabled(true); 
     FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 
    } 
    callbackManager = CallbackManager.Factory.create(); 
    setContentView(R.layout.activity_main); 
    info = (TextView)findViewById(R.id.info); 
    loginButton = (LoginButton)findViewById(R.id.login_button); 
    loginButton.setReadPermissions(Arrays.asList("email","user_friends")); 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
     final AccessToken accessToken= loginResult.getAccessToken(); 
      GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
        info.setText(
          "User ID: " 
            + user.optString("email") 
            + "\n" 
            + user.optString("name") 
            + "\n" + 
            "Auth Token: " 
            + accessToken.getToken() 
        ); 


       } 
      }).executeAsync(); 

     } 

     @Override 
     public void onCancel() { 
      info.setText("Login attempt canceled."); 
     } 

     @Override 
     public void onError(FacebookException e) { 

      info.setText("Login attempt failed."); 
     } 
    }); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

} 任何想法我在这里做错了吗?

+0

通过权限需要你的意思,你的电子邮件许可已批准在Facebook开发者控制台?由于某些帐户电子邮件中的隐私设置而造成的FYI不公开。你有没有尝试过不同的帐户 –

相反的:

executeAsync(); 

使用:

捆绑参数要求:

final AccessToken accessToken= loginResult.getAccessToken(); 
     GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
      @Override 
      public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
       info.setText(
         "User ID: " 
           + user.optString("email") 
           + "\n" 
           + user.optString("name") 
           + "\n" + 
           "Auth Token: " 
           + accessToken.getToken() 
       ); 


      } 
     }); 

Bundle parameters = new Bundle(); 
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)"); 
request.setParameters(parameters); 
request.executeAsync(); 

同时确保Email是:

Bundle parameters = new Bundle(); 
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)"); 
request.setParameters(parameters); 
request.executeAsync(); 
在你的代码

公开在您的Facebook帐户。

+0

它的工作。谢谢:) – Aneef

+0

很高兴帮助.... – rafsanahmad007