2017-09-25 1 views
1

아래 코드를 사용하여 내 앱을 통해 내 페이스 북 이메일 주소를 가져 오려고했지만 반환 값은 null입니다.Android에서 Facebook으로부터 이메일을받을 수 없습니다.

public class MainActivity extends AppCompatActivity { 
private CallbackManager callbackManager; 
private Button fb; 
private LoginButton loginButton; 
private AccessToken accessToken; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    callbackManager = CallbackManager.Factory.create(); 

    fb = (Button) findViewById(R.id.fb); 
    loginButton = (LoginButton) findViewById(R.id.login_button); 

    callbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().registerCallback(
      callbackManager, 
      new FacebookCallback <LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 

        accessToken= loginResult.getAccessToken(); 

        GraphRequestAsyncTask request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject user, GraphResponse response) { 
          final Profile profile = Profile.getCurrentProfile(); 

          if ((user != null) && (profile != null)) { 

           accessToken = AccessToken.getCurrentAccessToken(); 

           if (accessToken.getDeclinedPermissions().isEmpty()) { 


            try { 
             String email = user.get("email").toString(); 
             Log.e("facebook response email",email+"mm"); 
             Log.e("facebook response",user.toString()+"mm"); 
            } catch (JSONException e) { 
             e.printStackTrace(); 
            } 


           } 


          } 
         } 
        }).executeAsync(); 

       } 

       @Override 
       public void onCancel() { 
       } 

       @Override 
       public void onError(FacebookException exception) { 
       } 
      } 
    ); 

} 

public void onClick(View v) { 
    if (v == fb) { 
     LoginManager.getInstance().logInWithReadPermissions(
       this, 
       Arrays.asList("email","public_profile") 
     ); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
    accessToken = AccessToken.getCurrentAccessToken(); 
    if (accessToken != null) { 
     Log.e("Token", "Token: " + accessToken.getToken()); 
     Log.e("UserID", "UserID: " + accessToken.getUserId()); 
    } 
} 

}

나는 몇 가지 코드를 작성하지만, 결과가 null? 어떻게 Facebook SDK에서 이메일을받을 수 있습니까? 이유가 무엇인지 모르겠지만 그래프 API 탐색기를 사용하여 이메일 주소를 얻을 수 있습니다. 이 코드의 문제점을 아는 사람이 있습니까?

+0

원하는 필드를 지정해야합니다. – WizKid

+0

Facebook의 토큰과 전자 메일이 필요합니다. 그게 전부 @WizKid – BekaKK

+0

입니다. Facebook에 요청할 때 원하는 필드를 지정해야합니다. 그렇지 않으면 Facebook에서 귀하에게 반환하지 않습니다. – WizKid

답변

0

전자 메일을 검색하려면 사용자의 전자 메일 주소에 명시 적으로 ReadReadPermission을 설정해야합니다. 따라서 로그인 버튼을 초기화 한 후 코드에 다음 줄을 삽입하십시오.

loginButton.setReadPermissions("email"); 

그 후에 이메일 ID를 반환해야합니다.

모두 최고!

+0

나는 그것을 시도했지만 아직 깨우 치지 않았다. @Abhishek Singh – BekaKK

+0

나는이 줄에 문제가 있다고 생각한다. logInWithReadPermissions – BekaKK

+0

@Baggio - LoginButton을 설정하려면 LoginManager를 설정할 필요가 없다. LoginButton에는, LoginManager가 짜 넣어지고 있습니다. 따라서 버튼 2 개가 필요하지 않습니다. 하나의 로그인 버튼이 좋습니다. 또한 콜백을 LoginButton에 등록하지 않고 별도의 LoginManager 인스턴스에 등록했습니다. 코드를 단순화하십시오 - FB 로그인 버튼 만 사용하십시오. 추가 버튼이나 LoginManager 인스턴스가 필요 없습니다. –

관련 문제