2015-09-09 7 views
7

Ho usato l'ID app di test e accesso da utente test creato all'app dash_board su facebook sito di sviluppo, richiede il permesso pulish_actions quando accedi utilizzando il pulsante di accesso widget di facebook sdk ma il risultato è sempre postid = null. Qui è il mio codice:Finestra di dialogo facebook di post ID restituisce sempre null in Android

.... 

shareDialog = new ShareDialog(MainActivity.this); 
     shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
      @Override 
      public void onSuccess(Sharer.Result result) { 
       if (result.getPostId() != null) 
        Log.e(TAG, result.getPostId()); 
     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException e) { 

     } 
    }); 

    pulishButton.setOnClickListener(this); 
    try{ 
     loginButton.setPublishPermissions(new String[]{"publish_actions","publish_stream"}); 
    }catch (FacebookException e){ 
     e.printStackTrace(); 
    } 

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.e(TAG, "success"); 
      loginButton.setEnabled(false); 
      pulishButton.setEnabled(true); 
      GraphRequest.newMeRequest(
        loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject json, GraphResponse response) { 
          if (response.getError() != null) { 
           // handle error 
           System.out.println("ERROR"); 
          } else { 
           System.out.println("Success"); 


           } catch (JSONException e) { 
            e.printStackTrace(); 
           } 
          } 
         } 

        }).executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      Log.e(TAG, "On cancel"); 
     } 

     @Override 
     public void onError(FacebookException e) { 
      Log.d(TAG, e.toString()); 
     } 
    }); 

risposta

0

Non si può accedere direttamente con "publish_action", è necessario prima di login con qualsiasi letto il permesso poi chiedere per la pubblicazione delle autorizzazioni https://developers.facebook.com/docs/facebook-login/permissions/v2.4#publishing

+0

faccio seguire il vostro aiuto, ma ancora problemi, qui è perrmission di Facebook User: 09-09 13:54: 35.295 12360-12360/com.dtsgroup.facebookdemo E/MainFragment: user_posts 09-09 13: 54: 35.295 12360-12360/com.dtsgroup.facebookdemo E/MainFragment: public_profile 09-09 13: 54: 35.295 12360-12360 /com.dtsgroup.facebookdemo E/MainFragment: user_status 09-09 13: 54: 35.295 12360-12360/com.dtsgroup.faceboo kdemo E/MainFragment: publish_actions ShareResult restituisce ancora postid = null –

+0

si prega di controllare questo https://developers.facebook.com/docs/facebook-login/review/what-is-login-review, per qualsiasi permesso diverso da questi "public_profile, user_friends e email". devi inviare la tua app per la revisione di facebook. Se non vuoi inviare ora, puoi creare un utente di prova nella console per sviluppatori di Facebook e provare a effettuare l'accesso. Assicurati anche che tutti i dettagli sulla tua app nella console di sviluppo di Facebook siano corretti. – Pratik

+0

Sì, l'ho verificato con l'ID applicazione di test e l'utente di test. L'ho menzionato sulla mia domanda. Penso di aver trovato una soluzione, il problema è il dialogo di condivisione. Ho appena testato lo stato del post al feed dell'utente tramite API grafico, posso ottenere il postid. Ma non so perché la classe Sharer.Result abbia il metodo getPostId perché la mia app ha tutte le autorizzazioni necessarie per ottenere postID e non riesco a ottenerlo :( –

6

La soluzione è quello di forzare ShareDialog per utilizzare la modalità di alimentazione ed evitare di usare App di FB per la condivisione:

shareDialog.show(linkContent, ShareDialog.Mode.FEED); 

credo che questo sia un bug da FB. Non inviano postId al callback onSuccess quando utilizzano l'app FB per la condivisione (postId = null), ma lo fanno se si utilizza Feed.

Ho sentito che puoi evitare il problema "postId = null" utilizzando Facebook Login e richiedendo il permesso "publish_actions". Ma non penso che questo sia il modo corretto per affrontare questo problema. Per quanto riguarda il permesso citato Facebook afferma:

Publishing via dialogs or social plugins does not require this permission. Do not request review of this permission if you're only using Share dialog, Feed Dialog, Message Dialog etc, or Social Plugins (e.g. the Like Button.)

documenti di facebook condividi su Dialog:

This does not require Facebook Login or any extended permissions, so it is the easiest way to enable sharing on the web.

+2

Quando uso ShareDialog.Mode.FEED e SDK v4.5.0, ricevo il errore seguente: "Impossibile mostrare il contenuto fornito via web o la versione installata dell'app Facebook.Alcune finestre di dialogo sono supportate solo dall'API 14." – user1652110

+0

quando si usa questa modalità utente è indipendente con l'app FB del dispositivo corrente e * devono sempre accedere di nuovo *, non è un buon UX, sì, ma non trovo un buon modo per questo caso –

Problemi correlati