Cómo dar permiso de publish_action en Facebook usando android
Estoy recibiendo error
java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request.
A continuación se muestra mi código,
- ¿Cómo utilizar el inicio de sesión de Facebook para acceder a los datos del servidor backend en la aplicación para Android?
- ¿Se puede usar la misma ID de aplicación de facebook para la aplicación para Android y iPhone?
- No hacer fb como postId que acabo de compartir con éxito
- Cómo abrir la ventana de chat de mensajería de Facebook con el identificador de la aplicación en android
- Crear nuevo mensaje utilizando la API de gráfico de Facebook
public class MainActivity extends Activity { private static final String TAG = "MainFragment"; private UiLifecycleHelper uiHelper; WebView webView; Button nextButton; LoginButton authButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); authButton = (LoginButton) findViewById(R.id.authButton); authButton.setReadPermissions(Arrays.asList("email","user_birthday","basic_info")); uiHelper = new UiLifecycleHelper(this, callback); uiHelper.onCreate(savedInstanceState); } private void onSessionStateChange(final Session session, SessionState state, Exception exception) { if (state.isOpened()) { // /////// Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { String access_token = session.getAccessToken(); String email = user.asMap().get("email") .toString(); Log.i("user", "user fname====" + user.getFirstName()); Log.i("user", "user lname=======" + user.getLastName()); Log.i("user", "user username=====" + user.getUsername()); Log.i("user", "user email333======" + (String) response.getGraphObject() .getProperty("email")); Log.i("user", "user email new222======" + email); Log.i("user", "user email new111======" + user.getProperty("email").toString()); Log.i("user", "user DOB======" + user.getBirthday()); Log.i("user", "user getName======" + user.getName()); Log.i("user", "access_token======" + access_token); } } }); Request.executeBatchAsync(request); // ///////// Log.i(TAG, "Logged in..."); authButton.setVisibility(View.VISIBLE); } else if (state.isClosed()) { Log.i(TAG, "Logged out..."); } } private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { System.out.println("statusCallBack Called"); onSessionStateChange(session, state, exception); } }; @Override public void onResume() { super.onResume(); Session session = Session.getActiveSession(); if (session != null && (session.isOpened() || session.isClosed())) { onSessionStateChange(session, session.getState(), null); } uiHelper.onResume(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data); } @Override public void onPause() { super.onPause(); uiHelper.onPause(); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } }
- Android Facebook SDK - ¿Cómo iniciar sesión como otro usuario?
- Obtener lista de amigos facebook 3.0
- Android Facebook sdk 4.2 no puede recibir correo electrónico
- Uso de AccessToken almacenado en una variable de cadena en una nueva petición de gráfico
- Publicar en los amigos del usuario la pared de facebook a través de la aplicación Android
- Cómo obtener correo electrónico de usuario en GraphRequest.newMeRequest
- ¿Cómo comprobar en el diálogo de compartir con facebook apiv2.2?
- Falta el mensaje o error de adjunto al enviar el mensaje en Facebook
Utilice este código dentro de su actividad.
authButton.setPublishPermissions("publish_actions", "email", "user_birthday", "basic_info");
Con el fin de dar permisos de publicación antes de que el usuario realmente quiere publicar algo, de cierta actividad, y sin usar "UiLifecycleHelper". Este método funcionó para mí (basado en muchas pruebas y el código en este tutoriales específicos: https://developers.facebook.com/docs/games/mobile/android-tutorial/ https://developers.facebook.com/docs/ Facebook-login / permissions / )
Primero cree la solicitud de permisos (en caso de que el usuario no la tenga):
Session session = Session.getActiveSession(); if (PostOnFB.isChecked() && session != null && session.isOpened()) { List<String> permissions = session.getPermissions(); if (!permissions.contains("publish_actions")) { // if they choose to publish, then we request for publish permissions Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(GetUserLocationActivity.this, Arrays.asList("publish_actions")) .setDefaultAudience(SessionDefaultAudience.FRIENDS) .setCallback(newPermissionsCallback) .setRequestCode(REAUTH_ACTIVITY_CODE); session.requestNewPublishPermissions(newPermissionsRequest); } else { publishResult(); } }
Donde "publishResult ()" es el método que se llamará después de que el usuario obtenga los permisos.
A continuación, agregue un caso para onActivityResult:
@Override public void onActivityResult ( int requestCode, int resultCode, Intent data) { // Decide what to do based on the original request code switch (requestCode) { case .. .. .. .. .. case REAUTH_ACTIVITY_CODE : Session.getActiveSession().onActivityResult(GetUserLocationActivity.this, requestCode, resultCode, data); } }
Finalmente implementar la devolución de llamada:
private Session.StatusCallback newPermissionsCallback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (exception != null || !session.isOpened() || !session.getPermissions().contains("publish_actions")) { // this means the user did not grant us write permissions, so // do whatever you think } else { publishResult(); } } };
Eso es.
Aquí está el código de funcionamiento apenas intenta estos datos de la conexión de Facebook
Sólo cree este método en este método
private void makeMeRequest(final Session session) { Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { public void onCompleted(GraphUser user, Response response) { try{ Log.i("user", "user fname====" + user.getFirstName()); Log.i("user", "user lname=======" + user.getLastName()); Log.i("user", "user username=====" + user.getUsername()); createFacebookConnection(session); } catch (Exception e) { e.printStackTrace(); } } }); request.executeAsync(); }
Compartir datos facebook con muro facebook
public void createFacebookConnection(Session session) { Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); Session.StatusCallback statusCallback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { String message = "Facebook session status changed - " + session.getState() + " - Exception: " + exception; Log.w("Facebook test", message); if (session.isOpened() || session.getPermissions().contains("publish_actions")) { publishToWall(session); // share(session); } else if (session.isOpened()) { /* OpenRequest open = new OpenRequest(FacebookShareActivity.this).setCallback(this); ArrayList<String> permission = new ArrayList<String>(); permission.add("publish_actions"); open.setPermissions(permission); Log.w("Facebook test", "Open for publish"); session.openForPublish(open);*/ } } }; if (!session.isOpened() && !session.isClosed()&& session.getState() != SessionState.OPENING) { session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); } else { Log.w("Facebook test", "Open active session"); Session.openActiveSession(this, true, statusCallback); } }
- Android API 8, 10 ContactsContract.Data.HAS_PHONE_NUMBER ninguna columna
- Emparejar dos archivos de audio