2017-05-29 74 views
0

我想通過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不公開。你有沒有嘗試過不同的帳戶 –

回答

3

相反的:

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

相關問題