tutorial loginmanager loginbutton español developers crear con auth app android facebook-android-sdk

loginmanager - Accede al correo electrónico del usuario utilizando el nuevo SDK de Android de Facebook



import com facebook login loginmanager (4)

Cuando abra la sesión, intente incluir "correo electrónico" en la lista de permisos.

Si está utilizando LoginButton, haga algo como:

loginButton.setReadPermissions(Arrays.asList("email"));

Si está abriendo la sesión usted mismo, haga algo como:

session.openForRead(new Session.OpenRequest(this).setPermissions(Arrays.asList("email")));

Puede experimentar con solicitudes / permisos utilizando: https://developers.facebook.com/tools/explorer/

Una vez que haya iniciado sesión correctamente con estos permisos, vuelva a intentar la solicitud, incluido el campo de correo electrónico.

Hola, estoy jugando con el nuevo SDK de Android de Facebook. Una cosa que no pude averiguar es cómo puedo pedir una dirección de correo electrónico. Intenté seguir pero devolvió valores para todos los campos excepto la dirección de correo electrónico. Supongo que probablemente deba pedir permiso por separado para la dirección de correo electrónico, pero no estoy seguro de cómo puedo hacerlo si utilizo LoginFragment.

Request request = Request.newMeRequest(session, new GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { profilePictureView.setUserId(user.getId()); userNameView.setText(user.getName()); } }); String NAME = "name"; String ID = "id"; String PICTURE = "picture"; String EMAIL = "email"; String FIELDS = "fields"; String REQUEST_FIELDS = TextUtils.join(",", new String[] { ID, NAME, PICTURE, EMAIL }); Bundle parameters = new Bundle(); parameters.putString(FIELDS, REQUEST_FIELDS); request.setParameters(parameters); Request.executeBatchAsync(request);

Cualquier ayuda es apreciada. Gracias


Encontré una solución: y funciona.

LoginFragment loginFragment = new LoginFragment() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreateView(inflater, container, savedInstanceState); setReadPermissions(Arrays.asList("email")); return v; } };


Haz lo siguiente:

Después de configurar los permisos como arriba, acceda al correo electrónico a través de: user.asMap (). Get ("email"));

Vea el ejemplo a continuación

@Override protected void onSessionStateChange(SessionState state, Exception exception) { // user has either logged in or not ... if (state.isOpened()) { // make request to the /me API Request request = Request.newMeRequest(this.getSession(), new Request.GraphUserCallback() { // callback after Graph API response with user object @Override public void onCompleted(GraphUser user, Response response) { // TODO Auto-generated method stub if (user != null) { TextView etName = (TextView) findViewById(R.id.etName); etName.setText(user.getName() + "," + user.getUsername() + "," + user.getId() + "," + user.getLink() + "," + user.getFirstName()+ user.asMap().get("email")); } } }); Request.executeBatchAsync(request); } }


Si está utilizando com.facebook.widget.LoginButton , debe establecer permisos para este fragmento, después de eso Facebook devuelve el correo electrónico. Aquí está el código de trabajo:

LoginButton authButton = findViewById(R.id.sign_in_facebook); List<String> permissions = new ArrayList<>(); permissions.add("public_profile"); permissions.add("email"); permissions.add("user_birthday"); authButton.setReadPermissions(permissions);`

EDIT Facebook actualizó su SDK, lo que facilitó el trabajo con él. A partir de la versión 4.x ( changelog ) puede iniciar sdk en diferentes lugares donde lo necesite y usarlo de una manera muy simple. Aquí está la muestra:

FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); CallbackManager callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { String email = object.optString("email"); String uid = object.optString("id"); loginPresenter.loginBySocial(email, uid); } }); Bundle parameters = new Bundle(); parameters.putString("fields", "email"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { //your code } @Override public void onError(FacebookException exception) { //your code } });