2015-09-11 5 views
0

Heres метод im using и возвращает id и имя без проблем.Android - Facebook API не возвращает ни одного адреса электронной почты

// Private method to handle Facebook login and callback 
    private void onFblogin() { 
     callbackmanager = CallbackManager.Factory.create(); 

     // Set permissions 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "public_profile")); 

     LoginManager.getInstance().registerCallback(callbackmanager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 

         System.out.println("Success"); 
         GraphRequest.newMeRequest(
           loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
            @Override 
            public void onCompleted(JSONObject json, GraphResponse response) { 
             if (response.getError() != null) { 
              // handle error 
              System.out.println("ERROR"); 
             } else { 
              System.out.println("Success"); 
              try { 

               String jsonresult = String.valueOf(json); 
               System.out.println("JSON Result" + jsonresult); 

               // String str_email = json.getString("email"); 
               String str_email = json.getString("email"); 
               String str_name = json.getString("name"); 
               String str_id = json.getString("id"); 
// 

               // Save your info 
               settings = getSharedPreferences("login_details", 0); 
               SharedPreferences.Editor editor = settings.edit(); 
               editor.putString("name", str_name); 
               editor.putString("email", str_email); 
               editor.commit(); 



              } catch (JSONException e) { 
               e.printStackTrace(); 
              } 
             } 
            } 

           }).executeAsync(); 

         Intent openNewActivity = new Intent(getApplicationContext(), MainActivity.class); 
         startActivity(openNewActivity); 

        } 

        @Override 
        public void onCancel() { 
         Log.d("TAG_CANCEL", "On cancel"); 
        } 

        @Override 
        public void onError(FacebookException error) { 
         Log.d("TAG_ERROR", error.toString()); 
        } 
       }); 





    } 

Проблема у меня есть, что письмо не возвращается.

Ive проверил разрешения с другим приложением, которое может получить мою электронную почту, когда я вхожу в аккаунт, так что разрешения кажутся прекрасными. Я предполагаю, что я назвал это неправильно сейчас.

+0

Необходимо указать поле электронной почты, если вы этого хотите. – WizKid

ответ

1

Попробуйте это непосредственно перед выполнением вашей AsyncTask.

Вы можете сделать это внутри своего onSuccess() метода FacebookCallback().

GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback(){ 
    @Override 
    public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) { 
      try { 
       email = jsonObject.getString("email"); 

       fullName = jsonObject.getString("name");   


       } catch (Exception e) { 
        Log.d("FacebookActivity", "onCompleted - undetermined FB exception"); 
       } 

      } 
    }); 

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

@Override public void onCancel(){} 

@Override public void onError(){} 

Удачи вам!

+0

Не удается разрешить GraphJSONOBjectCallback или accessToken. – user237462

+0

GraphJSONObjectCallback; для accessToken, просто получите его, как в своем коде выше = loginResult.getAccessToken() – Eenvincible

+0

Ах, хорошо. Теперь он распечатывает электронное письмо. Большое спасибо. – user237462

Смежные вопросы