2014-03-26 2 views
4

안드로이드 용 ParseFacebook에서 사용자의 전자 메일 주소를 얻으려고하고 있지만 전자 메일을 가져 오려고하면 null이 표시됩니다. 여기 내 코드 만들기안드로이드 용 Parse Facebook을 사용하여 사용자 이메일 주소를 얻는 방법 -

//on Login: 

List<String> permissions = Arrays.asList("email","basic_info", "user_about_me", "user_location"); 
     ParseFacebookUtils.logIn(permissions,SignUpActivity. this, new LogInCallback() { 
      @Override 
      public void done(ParseUser user, ParseException err) { 
       SignUpActivity.this.progressDialog.dismiss(); 
       if(err!=null) 
       Log.w("parse exception",""+err.getMessage()); 
       if (user == null) { 
       Log.e("FB","Uh oh. The user cancelled the Facebook login."); 
       } else if (user.isNew()) { 
        Log.w("FB","User signed up and logged in through Facebook!"); 
        //showUserDetailsActivity(); 
        getProfileInfo(); 
       } else { 
        Log.w("FB","User logged in through Facebook!"); 
       // showUserDetailsActivity(); 
        getProfileInfo(); 
       } 
      } 

     }); 

요청 :

Request request = Request.newMeRequest(ParseFacebookUtils.getSession(),new Request.GraphUserCallback() { 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          JSONObject userProfile = new JSONObject(); 
          try { 
           // Populate the JSON object 
           try { 
            userProfile.put("facebookId", user.getId()); 
            userProfile.put("name", user.getName()); 
           } catch (Exception e) { 
            // TODO: handle exception 
           } 
           if (user.getProperty("email") != null) { 
            userProfile.put("email",(String) user.getProperty("email")); 
           } 
           if (user.getLocation().getProperty("name") != null) { 
            userProfile.put("location", (String) user.getLocation().getProperty("name")); 
           } 
           if (user.getProperty("gender") != null) { 
            userProfile.put("gender",(String) user.getProperty("gender")); 
           } 


          } catch (JSONException e) { 
           Log.e("Facebook parsing data","Error parsing returned user data."); 
          } 

         } else if (response.getError() != null) { 
          if ((response.getError().getCategory() == FacebookRequestError.Category.AUTHENTICATION_RETRY) || (response.getError().getCategory() == FacebookRequestError.Category.AUTHENTICATION_REOPEN_SESSION)) { 
           Log.e("Facebook parsing data","The facebook session was invalidated."); 
           //onLogoutButtonClicked(); 
          } else { 
           Log.e("Facebook parsing data","Some other error: "+ response.getError().getErrorMessage()); 
          } 
         } 
        } 
       }); 
     request.executeAsync(); 

나는 모든 노력을하지만, 한 곳 난 액세스 위로 사용 권한을 설정 한 후 이메일 널 (null) :(

답변

0

을 얻고있다 할 이제까지 이메일 주소 : user.asMap(). get ("email"));

+0

user.asMap을 이메일을 받게됩니다. –

0

당신은 로그인 호출 권한 목록을 제거해보십시오이

String email = (String) response.getGraphObject().getProperty("email"); 
if(email!=null && !email.equals("") 
//email variable should've email id. 
+0

여전히 null이되어 다른 모든 필드를 가져옵니다. 실수를 추적 할 수 없습니다 ... –

0

같은 이메일을 얻어야한다.

ParseFacebookUtils.logIn(SignUpActivity.this, new LogInCallback() { 
//you can add permissions on later screens. 
} 
+0

제안하시는 것을 설명해주십시오. –

+0

로그인하는 동안 권한을 포함하지 마십시오. – nomi13ok

0

당신이 요청을 추가하십시오 :

로그인 요청 조건에서
Request request = Request.newMeRequest(ParseFacebookUtils.getSession(),new Request.GraphUserCallback() 

=> user.isnew()

else if (user.isNew()) { 
       Log.w("FB","User signed up and logged in through Facebook!"); 
       //showUserDetailsActivity(); 
       getProfileInfo(); 
      } 

이 사이에 블록을 작성하고 당신이 할 수있을 것입니다 이메일로 새로운 사용자 정보를 얻으십시오.

이것은 iOS에서 완벽하게 작동하며 확실하게 Android에서 도움이됩니다. 라인

request.executeAsync(); 

이 세 줄을 추가하기 전에

0

.

Bundle parameters = new Bundle(); 
parameters.putString("fields", "id,name,email"); 
request.setParameters(parameters); 

지금 당신은 null을 반환 ("이메일을"))(). 응답에

관련 문제