Facebook SDK 4.x Android Publicar como página de Facebook
Ok, ya he descubierto este ya, pero quería ponerlo por ahí en caso de que alguien más se está ejecutando en los problemas. Básicamente, lo que tenía que hacer era publicar como página de usuario de Facebook (es decir, yo soy John Doe y soy un administrador de la página Rum Ham, quiero publicar en la página Rum Ham).
- ¿Hay implicaciones de rendimiento al usar ArrayList.get () muchas veces por iteración?
- Herencia parcelable: clase abstracta - ¿QUÉ CREADOR?
- Android: Cómo rellenar una vista de lista con elementos de matriz
- Milliseconds hasta la fecha en GMT en Java
- Transmitir vídeo en vivo desde la cámara en android
- Cómo generar automáticamente getters y setters en Android Studio
- Elemento de fila personalizada de Android para ListView
- Android ejecutando una instrucción if aunque no debería ejecutar nunca?
- Custom Lint para Java / Android Informe si encontramos una llamada de clase sin implementar su interfaz
- Configuración de la orientación de la pantalla Actividad de Android con values.xml
- Consumir servicios REST en Android, la forma más fácil?
- Error de estudio de Android: Se ha producido un error al intentar calcular los paquetes requeridos
- Los datos permanecen en el almacén de datos local después de desenfilar
Así que, básicamente, la respuesta se ve así
Primero, necesitas registrar al usuario con esta línea
LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions", "manage_pages", "publish_pages"));
A continuación, debe obtener el token de acceso de la página que desea publicar en
Bundle params = new Bundle(); //ok so access token here is "app_ID|app_secret" params.putString("access_token", accessToken); params.putString("fields", "id"); GraphRequest request = new GraphRequest(null, "me", params, HttpMethod.GET, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { FacebookRequestError error = response.getError(); if (error != null) { Log.e("Error", error.getErrorMessage()); } else { JSONObject values = response.getJSONObject(); try { //so I have to get the user ID first String id = values.getString("id"); Bundle p = new Bundle(); p.putString("access_token", accessToken); //yay nest the graph requests //once we get the id we can get their pages GraphRequest pagesRequest = new GraphRequest(null, "/" + id + "/accounts", p, HttpMethod.GET, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { FacebookRequestError error = response.getError(); if (error != null) { Log.e("Error", error.getErrorMessage()); } else { //ok so here, we're getting the pages back in a few JSON wrappers JSONObject values = response.getJSONObject(); JSONArray array = null; try { array = values.getJSONArray("data"); //ok, so here we're just iterating through the pages a user has, obviously you can handle this accordingly.. for (int i = 0; i < array.length(); i++) { //ok, here's how to actually get the token String access_token = array.getJSONObject(i).getString("access_token") } } catch (JSONException e) { e.printStackTrace(); } } } }); GraphRequest.executeAndWait(pagesRequest); } catch (Exception e) { e.printStackTrace(); } } } }); GraphRequest.executeAndWait(request); }
Ok, así que una vez que tengamos la página de token de acceso, aquí es donde entra en juego el real kery que Facebook se niega a contarle en sus páginas de referencia. Por lo tanto, olvídese de cualquier cosa que haya leído sobre la necesidad de enviar su aplicación para su revisión con ellos. Todo lo que tenía que hacer era crear un nuevo token de acceso así.
//create a new access token, facebook refers to this as a page access token AccessToken token = new AccessToken("page_access_token", AccessToken.getCurrentAccessToken().getUserId(), Arrays.asList("publish_actions", "manage_pages", "publish_pages"), null, AccessTokenSource.FACEBOOK_APPLICATION_SERVICE, AccessToken.getCurrentAccessToken().getExpires(), AccessToken.getCurrentAccessToken().getLastRefresh()); //then we simply update our current access token AccessToken.setCurrentAccessToken(token);
Ahora, todavía no hemos terminado. Finalmente, necesitamos hacer la llamada a la API para crear la publicación:
Bundle params = new Bundle(); params.putString("message", "Contents of message"); //here, token is our newly created AccessToken object GraphRequest request = new GraphRequest(token, "/pageid/feed", params, HttpMethod.POST, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { FacebookRequestError error = response.getError(); if (error != null) { Log.e("Error", error.getErrorMessage()); } else { //do your own processing here for success } } }); GraphRequest.executeAndWait(request); } }
Y eso es más o menos. Espero que esto ayude a alguien!