2013-09-18 1 views
2

Я новичок в разработке Android, а также новичок здесь, на SO. Мой вопрос: у меня есть кнопка (а не facebook LogginButton), которая реализует логин facebook. Мне также нужно после входа в систему получить электронное письмо пользователя. Но способ, которым я реализовал это, оказывается, что иногда он не извлекает почту пользователя. Если в первый раз я использую приложение, я должен нажать несколько раз (по крайней мере дважды) на кнопку входа в мое приложение, чтобы он, наконец, привел мне письмо, и после первого раза, когда я получу электронное письмо, оно всегда будет приносить мне по электронной почте в следующий раз, когда я нажму кнопку входа. Но, если я перейду на свою учетную запись и удалю приложение, проблема снова проявится. Я думаю, что у меня проблемы с настройкой разрешения или с управлением сессиями. Я отправлю свой код ниже:Войдите в систему с facebook sdk 3.5 и получите электронную почту - android

public void onClickLoginFacebook(View view) { 
Session.StatusCallback statusCallBack = new Session.StatusCallback() { 

// callback when session changes state 
@Override 
public void call(Session session, SessionState state, Exception exception) { 

    if (session.isOpened()) { 
     // make request to the /me API 
      Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { 

        // callback after Graph API response with user object 
        @Override 
       public void onCompleted(GraphUser user, Response response) { 

        if (user != null) { 
         if (user.asMap().get("email")!=null){ 
         userFacebook.setEmail(user.asMap().get("email").toString()); 
        } 


       }else{ 
         Toast.makeText(getApplicationContext(), "Error on facebook login: " + response.getError().getErrorMessage(), Toast.LENGTH_LONG).show(); 
        } 

      } 

      }); 
      }else if(session.isClosed()){ 
       Toast.makeText(getApplicationContext(), "Error on facebook login", Toast.LENGTH_LONG).show(); 
      } 

} 
    }; 

    if(isOnline()) 
    { 

     Session session = Session.getActiveSession(); 
     if(session == null){ 
      session = new Session.Builder(this).setApplicationId(
          this.getString(R.string.app_id)).build(); 
          Session.setActiveSession(session); 
     } 
      if (!session.isOpened() && !session.isClosed()) { 
        session.openForRead(new Session.OpenRequest(this) 
         .setPermissions(Arrays.asList("email")) 
         .setCallback(statusCallBack)); 
      } else { 
        Session.openActiveSession(LoginActivity.this, true, statusCallBack); 
      } 

    } 
    else 
    { 
      Toast.makeText(getApplicationContext(), R.string.error_message, Toast.LENGTH_LONG).show(); 
    } 
    } 


     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
} 

Может ли кто-нибудь мне помочь? PS .: Извините за мой плохой английский =/

+0

взглянуть на этот ответ: http://stackoverflow.com/questions/18978108/get-user-facebook-permissions – stiga

+0

Или увидеть этот запрос вызова, используя расширенные права доступа в одном выстрел HTTP: // StackOverflow. ком/а/21744500/1834212 – Miguel

ответ

0

Перед вызовом Session.openActiveSession() сделать это, чтобы получить разрешения добавить следующее:

List<String> permissions = new ArrayList<String>(); 
permissions.add("email"); 

Последний параметр в Session.openActiveSession() должны быть права доступа. Теперь вы можете получить доступ к user.getProperty("email").toString().