9

Sto seguendo il tutorial di condivisione Android di facebook su facebook (https://developers.facebook.com/docs/android/share). L'app funziona bene e posso accedere con facebook e fare clic sul pulsante di condivisione demo. Quindi questa è la procedura della mia app:Facebook SDK 3.8: autorizzazione publish_actions non restituita

  1. Accedi con Facebook
  2. L'oggetto sessione facebook viene aggiornato e le seguenti autorizzazioni vengono salvate all'interno dell'oggetto sessione: user_likes, user_friends, user_status, basic_info
  3. Ora, voglio condividere qualcosa. Pertanto l'utente fa clic su un pulsante di condivisione e di una richiesta di autorizzazione ulteriore chiamata publish_actions è fatto

Il seguente codice esegue questa richiesta:

public class MainActivity extends Activity { 

    private Button shareButton; 
    private UiLifecycleHelper uiHelper; 
    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
    private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
    private boolean pendingPublishReauthorization = false; 

... 
    private void publishStory() { 
     Session session = Session.getActiveSession(); 
     if(session != null) { 
      List<String> permissions = session.getPermissions(); 
      if(!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS); 
//Request the new permission here. The answer is processed in onSessionStateChange() method 
       session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

... 

    private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
//since the session is already open we enter this if branch 
     if (state.isOpened()) { 
      shareButton.setVisibility(View.VISIBLE); 
//The result of state.equals(SessionState.OPENED_TOKEN_UPDATED) is false which indicates that the session object has not been updated (as far as I understand the fb api) 
      Log.e(TAG, "state.equals(SessionState.OPENED_TOKEN_UPDATED) = " + state.equals(SessionState.OPENED_TOKEN_UPDATED)); 
//Output all the current permission the session has (publish_actions is not included here) 
      List<String> permissions = session.getPermissions(); 
      Iterator<String> it = permissions.iterator(); 
      Log.e(TAG, "Content of list:"); 
      while(it.hasNext()) 
       Log.e(TAG, "permission = " + it.next()); 
//Since the OPENED_TOKEN_UPDATED has not been updated nothing further happens here    
      if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED)) { 
       pendingPublishReauthorization = false; 
       publishStory(); 
      } 
     } else if (state.isClosed()) { 
      shareButton.setVisibility(View.INVISIBLE); 
     } 
    } 

Così, anche se questo sembra essere corretto ci deve essere qualche errore rimanente. Il permesso publish_actions non è concesso, ma non capisco perché. Solo le autorizzazioni esistenti rimangono publish_actions.

Ulteriore osservazione: ho letto alcune domande che dicono che dovrebbe apparire un ulteriore popup che chiede all'utente di concedere l'autorizzazione. Comunque questo non succede nel mio caso. Forse questo è il problema? In tal caso, cosa devo fare per ottenere la finestra popup?

AGGIORNAMENTO: Ho anche provato il seguente esempio di github: https://gist.github.com/vishalpawale/5556996 Questo codice di esempio non funziona a causa dello stesso motivo. Non ottiene alcun permesso di pubblicazione_action. Sembra essere un bug reale nell'SDK di Facebook?

+0

Non sono sicuro, ma ora sto cercando di risolvere questo problema. Apparentemente Facebook ha ritirato la possibilità di pubblicare post tramite l'API. Hai trovato qualche soluzione? – Wordica

+0

Ho seguito developers.facebook.com/docs/android/share l'esempio per postare su un muro di utenti. Funziona bene se accedo a Facebook utilizzando l'email dello sviluppatore dell'app. Con i non sviluppatori, non ottengo i permessi ... Succede lo stesso per te? –

+0

stesso problema, autorizzazione publish_action non concessa. –

risposta

0

se si utilizza Facebook SDK 3.14.x + THN dopo 30 apr Facebook ha cambiato il test delle applicazioni e processo di invio. Risposta pubblicata in merito al permesso. check this link

0

Avevamo lo stesso problema qui.

Provare a utilizzare:

Session.getActiveSession().refreshPermissions(); 

Questo sarà aggiornare l'elenco dei permessi disponibili sul

List<String> permissions = session.getPermissions(); 

Esso funziona solo con Facebook gli utenti registrati sviluppatori o gli utenti registrati di prova attraverso il Facebook App Dashboard.

Questo ha funzionato per noi.

0

Restituisce solo il permesso di lettura, non il permesso di scrittura. Prova lo snippet sotto

final Bundle permBundle = new Bundle(); 
    permBundle.putCharSequence("permission", "publish_actions"); 
    GraphRequest request = new GraphRequest(
      AccessToken.getCurrentAccessToken(), 
      "/me/permissions", permBundle, HttpMethod.GET, 
      new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse graphResponse) { 
        Log.d(TAG, "response2: " + graphResponse.getJSONObject()); 
        try { 
         JSONArray permList = (JSONArray) graphResponse.getJSONObject().get("data"); 
         if(permList.length() == 0){ 
          // no data for perms, hence asking permission 
          askForFBPublishPerm(); 
         }else{ 
          JSONObject permData = (JSONObject) permList.get(0); 
          String permVal = (String) permData.get("status"); 
          if(permVal.equals("granted")){ 
           postToFB(); 
          }else{ 
           askForFBPublishPerm(); 
          } 
         } 
        } catch (JSONException e) { 
         Log.d(TAG, "exception while parsing fb check perm data" + e.toString()); 
        } 

       } 
      } 
    ); 
    request.executeAsync(); 
Problemi correlati