Autore Topic: Condividere un post su facebook utilizzando le Api ufficiali  (Letto 838 volte)

Offline pcg4m3s

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    Windows 7
Condividere un post su facebook utilizzando le Api ufficiali
« il: 18 Luglio 2013, 16:16:53 CEST »
0
Salve,
nella mia app x android devo poter condividere un link su facebook premendo un semplice bottone.

Cercando su internet ho trovato il seguente codice:
Codice (Java): [Seleziona]
public void createFacebookConnection() {
                Session session = new Session(this);
                Session.setActiveSession(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 - " + state + " - Exception: " + exception;
                                Log.w("Facebook test", message);

                                //questo succede quando alla schermata di login l'utente annulla il login
                                if(state==SessionState.CLOSED_LOGIN_FAILED || state==SessionState.CLOSED)
                                        finish();

                                if (session.isOpened() || session.getPermissions().contains("publish_actions")) {
                                        procediPubblicazione();
                                } else if (session.isOpened()) {
                                        OpenRequest open = new OpenRequest(AzioneSuFacebook.this).setCallback(this);
                                        List<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(AzioneSuFacebook.this, true, statusCallback);
                }
        }

public void procediPubblicazione()
        {
                //i parametri da passare alla request per postare sul diario
                Bundle postParams = new Bundle();
                postParams.putString("link", link);

                //request per postare il link
                Request.Callback callback = new Request.Callback() {
                        public void onCompleted(Response response) {
                                FacebookRequestError error = response.getError();
                                if (error != null) {
                                        Toast.makeText(AzioneSuFacebook.this, error.getErrorMessage(), Toast.LENGTH_SHORT).show();
                                } else {
                                        JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
                                        String postID = null;
                                        try {
                                                postID = graphResponse.getString("id"); //ottengo l'id del post pubblicato!
                                                System.out.println("Pubblicano nuovo post. ID: "+postID);
                                        } catch (JSONException e) {
                                                Log.i("Facebook error", "JSON error " + e.getMessage());
                                        }
                                        Toast.makeText(AzioneSuFacebook.this, "Link condiviso correttamente su Facebook da "+nomeFB+" !", Toast.LENGTH_SHORT).show();
                                }
                                disconnectFacebookAccount();
                        }
                };

                Request request = new Request(Session.getActiveSession(), "me/feed", postParams, HttpMethod.POST, callback);

                RequestAsyncTask task = new RequestAsyncTask(request);
                task.execute();
        }

Funziona tutto, nel senso che se non sono già loggato nell'app di facebook mi fa fare il login, ecc.
Quando però prova a condividere, mi esce il seguente messaggio di errore:
(#200) The user hasn't authorized the application to perform this action

Qualcuno di voi riesce ad aiutarmi per favore?

PS: ovviamente ho creato l'app su developers.facebook.com per creare un app id, ho messo l'hash del keystore ed ho dato l'autorizzazione publish_actions.


Offline boggiano

  • Utente junior
  • **
  • Post: 62
  • Respect: +5
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    Alessandro Boggiano
  • Sistema operativo:
    Fedora
Re:Condividere un post su facebook utilizzando le Api ufficiali
« Risposta #1 il: 01 Agosto 2013, 14:09:09 CEST »
0
Ciao,
premesso che sto pasticciando anche io in questi giorni con le API di FB, (quindi sto "navigando a vista"...), io ho questo codice:

Codice: [Seleziona]
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
e dopo:

 
Codice: [Seleziona]
List<String> permissions = session.getPermissions();
                if (!isSubsetOf(PERMISSIONS, permissions)) {
                    pendingPublishReauthorization = true;
                    Session.NewPermissionsRequest newPermissionsRequest = new Session
                            .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);