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:
- 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;
- 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!
Grazie per aver scavato nel lavoro di Facebook. A proposito, ora hanno questo 'ShareApi.share (linkContent, shareCallback);' nel loro sdk. –