2015-09-17 15 views
6

di Facebook documentazione Sharing on Android ci dice di mostrare la ShareDialog con il seguente frammento di codice:Come gestire Facebook ShareDialog.canShow() == false su Android

if (ShareDialog.canShow(ShareLinkContent.class)) { 
    ShareLinkContent linkContent = new ShareLinkContent.Builder() 
      .setContentTitle("Hello Facebook") 
      .setContentDescription(
        "The 'Hello Facebook' sample showcases simple Facebook integration") 
      .setContentUrl(Uri.parse("http://developers.facebook.com/android")) 
      .build(); 

    shareDialog.show(linkContent); 
} 

La mia domanda è perché abbiamo bisogno di controllare ShareDialog. canShow()? In quali scenari questo potrebbe tornare falso e dobbiamo gestire questo scenario? Il codice di esempio fallirebbe silenziosamente non dire nulla all'utente.

risposta

19

Ho trascorso un sacco di tempo ieri cercando di eseguire il debug di un errore relativo a questo. I documenti di Facebook sono scarsi in questo senso e quando c'è un errore relativo a questo metodo canShow(), fallisce semplicemente in modo silenzioso, senza alcuna registrazione.

Quindi, per rispondere alla tua domanda:

La mia domanda è perché abbiamo bisogno di controllare ShareDialog.canShow()? In quali scenari questo potrebbe restituire false e dobbiamo gestire lo scenario ?

In base allo scenario che ho dovuto affrontare: quando l'utente non dispone l'applicazione Facebook installato sul proprio dispositivo e si desidera condividere le foto (SharePhotoContent) o video (ShareVideoContent), canShow() tornerà false. Il motivo è che la versione WebView di Facebook SDK non supporta la condivisione di questo tipo di contenuto.

Ho trovato questo debug della classe FacebookActivity, nel metodo handlePassThroughError(). Il messaggio di errore (non registrato) è:

"Impossibile mostrare il contenuto fornito. Ciò significa in genere che l'app di Facebook non è installata o aggiornata. Se viene visualizzata tramite Web, ciò potrebbe significare che il contenuto ha proprietà che non sono supportate tramite questo canale. "

Allora, che cosa dobbiamo fare quando canShow() rendimenti false?

Dipende dal tuo scenario. Le possibili soluzioni potrebbero essere:

  1. Mostra una finestra di dialogo (o SnackBar) che indica all'utente che è necessario installare l'app di Facebook per poter condividere questo tipo di contenuto;
  2. Richiedi un token di autenticazione, registra l'utente utilizzando l'SDK di Facebook e condividi il contenuto utilizzando la tua finestra di dialogo e chiamando direttamente l'API di Facebook.

Le possibili soluzioni per Facebook potrebbero essere incluse nella documentazione o registrare questo errore su LogCat.

Spero che aiuti!

+0

Grazie per aver scavato nel lavoro di Facebook. A proposito, ora hanno questo 'ShareApi.share (linkContent, shareCallback);' nel loro sdk. –

-1
// for facebook 

    callbackManager = CallbackManager.Factory.create(); 
    shareDialog = new ShareDialog(this); 

    // this part is optional 

    shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
     @Override 
     public void onSuccess(Sharer.Result result) { 

     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException e) { 

     } 
    }); 
+0

Questo è completamente estraneo alla mia domanda. Voglio specificamente sapere perché dovremmo chiamare ShareDialog.canShow() prima di mostrare la finestra di dialogo. –

+0

ShareDialog.canShow() sta verificando l'ID dell'applicazione sdk di Facebook e il controllo del tipo di contenuto ... ecc. –

0

questa risposta per qualcuno che affronta lo stesso problema.

@leocadiotine era eccezionale.

Da facebook sdk sample, quando ShareDialog.canShow() restituisce false è necessario utilizzare la funzione ShareApi.share.

+0

Questo non funziona condividendo le immagini –

Problemi correlati