Condivisione su Android

Questa guida spiega in dettaglio come abilitare la condivisione dalla tua app per Android su Facebook. Quando gli utenti condividono contenuti dalla tua app, questi ultimi vengono visualizzati nel diario e nella sezione Notizie degli amici.

Inoltre, è possibile condividere i contenuti dalla tua app su Facebook Messenger.

Prerequisiti

Prima di poter effettuare condivisioni su Facebook dalla tua app, devi collegare o scaricare l'SDK per la condivisione di Facebook per Android.

L'SDK per la condivisione per Android è un componente dell'SDK di Facebook per Android. Per usare l'SDK per la condivisione di Facebook nel tuo progetto, rendilo una dipendenza in Maven o scaricalo. Scegli il metodo che preferisci con il pulsante seguente.

Collegamento dell'SDK con Maven

  1. Nel tuo progetto, apri your_app | Gradle Scripts | build.gradle (Project) e aggiungi il repository seguente alla sezione buildscript { repositories {}} per scaricare l'SDK dal repository centrale Maven:
    mavenCentral() 
  2. Nel tuo progetto, apri your_app | Gradle Scripts | build.gradle (Module: app) e aggiungi l'istruzione di compilazione seguente alla sezione dependencies{} per compilare la versione più recente dell'SDK:
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. Crea il progetto.

Scarica l'SDK

Per scaricare l'SDK, clicca sul pulsante seguente.

Scarica l'SDK

Quando usi l'SDK per la condivisione di Facebook, le azioni nella tua app vengono registrate e raccolte automaticamente per Facebook Analytics a meno che non disabiliti la registrazione automatica delle azioni. Per maggiori dettagli sul tipo di informazioni raccolte e su come disabilitare la registrazione automatica delle azioni, consulta Registrazione automatica delle azioni nelle app.

Altri prerequisiti

Inoltre, devi attenerti alla procedura seguente:

Per maggiori dettagli su questi requisiti, consulta Primi passi su Android.

Dovrai anche configurare un ContentProvider in AndroidManifest.xml, dove {APP_ID} sarà il tuo ID app:

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true"/>

Nell'implementazione della condivisione, la tua app non deve precompilare i contenuti da condividere. Questo comportamento viola la Normativa della Piattaforma Facebook, consulta il punto 2.3 della Normativa.

Modellazione dei contenuti

A partire dalla versione 4.0, gli SDK di Facebook offrono nuovi modelli per la condivisione dei contenuti. Ogni tipo di contenuto ha una classe, che puoi usare per rappresentarlo. Una volta modellati i contenuti, aggiungi un'interfaccia di condivisione alla tua app.

Quando gli utenti condividono link dalla tua app su Facebook, viene incluso anche un elemento contentURL con il link da condividere. Crea i contenuti da condividere per i link nel modello ShareLinkContent. Per una lista di tutti gli attributi, consulta il riferimento per ShareLinkContent.

A partire dal 18 aprile 2017, i seguenti parametri non sono più supportati dall'API Graph 2.9 e versioni successive. Per le versioni 2.8 e precedenti, i parametri continueranno a funzionare fino al 17 luglio 2017.

  • contentTitle, che rappresenta il titolo dei contenuti del link.
  • imageURL, l'URL della miniatura visualizzata nel post.
  • contentDescription, la descrizione dei contenuti, generalmente 2-4 frasi.

Ecco un esempio di come puoi attivare la condivisione:

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .build();

Per l'anteprima della condivisione di un link a Google Play o all'App Store, inserisci l'URL nell'analizzatore di condivisione.

Se la condivisione della tua app contiene un link a qualsiasi app su Google Play o sull'Apple Store, la descrizione e l'immagine incluse nella condivisione verranno ignorate. Tuttavia, estrarremo direttamente il titolo e l'immagine di tale app dallo store (se non è presente nessuna immagine, la condivisione non ne includerà una).

Foto

Gli utenti possono condividere foto dalla tua app su Facebook tramite la finestra di condivisione o un'interfaccia personalizzata.

  • Le dimensioni delle foto non devono superare 12 MB.
  • È necessario installare la versione 7.0 o successive dell'app nativa Facebook per Android.

Crea i contenuti da condividere per le foto nel modello SharePhotoContent. Per una lista di tutti gli attributi, consulta il riferimento per SharePhotoContent.

Bitmap image = ...
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

Video

Gli utenti che usano la tua app possono condividere video su Facebook tramite la finestra di condivisione o un'interfaccia personalizzata.

Le dimensioni dei video non devono superare 12 MB.

Crea i contenuti da condividere per i video nel modello ShareVideoContent. Per una lista di tutti gli attributi, consulta il riferimento per ShareVideoContent.

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

Contenuti multimediali

Gli utenti possono condividere una combinazione di foto e video dalla tua app a Facebook usando la finestra di condivisione. Tieni presente le seguenti indicazioni:

  • È necessario installare la versione 71 o successive dell'app nativa Facebook per Android.
  • Le dimensioni delle foto non devono superare 12 MB.
  • Le dimensioni dei video non devono superare 12 MB.
  • È possibile condividere fino a un massimo di 6 foto e video contemporaneamente.

Crea i tuoi contenuti multimediali per la condivisione con il modello ShareMediaContent. Per una lista di tutti gli attributi, consulta il riferimento per ShareMediaContent.

SharePhoto sharePhoto1 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();

ShareContent shareContent = new ShareMediaContent.Builder()
    .addMedium(sharePhoto1)
    .addMedium(sharePhoto2)
    .addMedium(shareVideo1)
    .addMedium(shareVideo2)
    .build();

ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);

Aggiunta di interfacce di condivisione

Una volta gestiti i contenuti tramite la creazione di un modello, puoi attivare un'interfaccia di condivisione di Facebook o crearne una personalizzata che chiami l'API Graph.

Pulsanti

Facebook offre pulsanti nativi per attivare la condivisione su Android.


Con il rilascio della versione 4.28.0 dell'SDK di Facebook per Android, il pulsante Mi piace per Android è diventato obsoleto. Sarà supportato fino al 5 febbraio 2018.

Pulsante "Mi piace"

Il pulsante "Mi piace" è un modo veloce per condividere contenuti con gli amici. Toccando il pulsante è possibile mettere "Mi piace" ai contenuti della tua app e condividerli su Facebook. Inoltre, può essere usato per mettere "Mi piace" a una Pagina Facebook o agli oggetti Open Graph ed è possibile farvi riferimento tramite un URL o un ID. Per aggiungere un pulsante "Mi piace", aggiungi il seguente snippet di codice alla tua visualizzazione:

LikeView likeView = (LikeView) findViewById(R.id.like_view);
likeView.setObjectIdAndType(
    "https://www.facebook.com/FacebookDevelopers",
    LikeView.ObjectType.PAGE);

Pulsante Condividi

Il pulsante Condividi chiama una finestra di condivisione. Per aggiungere un pulsante Condividi, aggiungi il seguente snippet di codice alla tua visualizzazione:

ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button);
shareButton.setShareContent(content);

Con il rilascio della versione 4.28.0 dell'SDK di Facebook, il pulsante Invia è diventato obsoleto. Sarà supportato fino al 5 febbraio 2018.

Pulsante Invia

Il pulsante Invia permette agli utenti di inviare privatamente foto, video e link ad amici e contatti tramite Facebook Messenger. L'operazione viene eseguita tramite una chiamata alla finestra di messaggio. Per aggiungere un pulsante Invia, aggiungi il seguente snippet di codice alla tua visualizzazione:

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

Finestra di condivisione

La finestra di condivisione reindirizza all'app nativa Facebook per Android, restituendo il controllo alla tua app una volta pubblicato il post. A seconda dell'SDK in uso, gli utenti potrebbero dover toccare l'icona della freccia indietro per tornare all'app. Se l'app Facebook non è installata, verrà aperta automaticamente la finestra di condivisione basata sul Web come fallback.

ShareDialog.show(activityOrFragment, content);

Ad esempio, per mostrare una ShareDialog per un link nella tua attività, crea un'istanza ShareDialog nel metodo onCreate:

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    ShareDialog shareDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });
    }

Successivamente, mostra ShareDialog:

if (ShareDialog.canShow(ShareLinkContent.class)) {
    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
            .build();
    shareDialog.show(linkContent);
}

Infine, chiama callbackManager dell'SDK in onActivityResult per gestire la risposta:

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

Finestra di messaggio

La finestra di messaggio reindirizza all'app nativa Messenger per Android, restituendo il controllo alla tua app una volta pubblicato il post. A seconda dell'SDK in uso, gli utenti potrebbero dover toccare l'icona della freccia indietro per tornare all'app.

MessageDialog.show(activityOrFragment, content);

Funzioni aggiuntive

Usando la finestra di condivisione di Facebook avrai a disposizione altre opzioni che non sono disponibili quando condividi contenuti usando l'API.

Hashtag

Puoi specificare che un singolo hashtag venga visualizzato con una foto, un link o un video condiviso. L'hashtag viene visualizzato anche nella finestra di condivisione e gli utenti possono rimuoverlo prima della pubblicazione.

Questo è un esempio di aggiunta di un hashtag alla condivisione di un link.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setShareHashtag(new ShareHashtag.Builder()
                .setHashtag("#ConnectTheWorld")
                .build());
        .build();

Condivisione delle citazioni

Puoi consentire agli utenti di mettere in evidenza una porzione di testo affinché venga visualizzato come citazione con un link condiviso. In alternativa, puoi impostare una citazione predefinita, ad esempio una citazione in evidenza in un articolo, affinché venga visualizzata con il link condiviso. In ogni caso, la citazione verrà visualizzata in un campo apposito, separato dai commenti degli utenti.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setQuote("Connect on a global scale.")
        .build();

Argomenti avanzati

Fallback di condivisione integrati

Nelle versioni precedenti dell'SDK per Android, per aprire la finestra di condivisione la tua app doveva controllare che fosse installata l'app nativa Facebook. Se l'utente non l'aveva installata, era necessario fornire il tuo codice per chiamare una finestra di dialogo di fallback.

Ora l'SDK controlla automaticamente la presenza dell'app nativa Facebook. Se non è installata, reindirizza gli utenti al browser predefinito per aprire la finestra di dialogo delle Notizie. Se l'utente desidera condividere una notizia Open Graph, l'SDK apre la finestra di condivisione per il Web.

Con App Links, puoi inserire link alla tua app nei post pubblicati su Facebook tramite l'app stessa. Quando gli utenti cliccano su un post pubblicato usando la tua app, quest'ultima verrà aperta. Inoltre, puoi inserire link a contenuti specifici dell'app.

Interfaccia personalizzata

Per usare un'interfaccia di condivisione personalizzata, devi:

Per pubblicare un link su Facebook dalla tua interfaccia, usa il seguente codice:

ShareApi.share(content, null);

Condivisione di notizie Open Graph

Le notizie Open Graph consentono agli utenti di condividere contenuti elaborati e strutturati tramite un'API fortemente tipizzata, definiti dalle azioni e dagli oggetti Open Graph. I post contengono link alla tua app o alla relativa pagina nell'App Store.

Per maggiori informazioni su come configurare notizie personalizzate, consulta Notizie Open Graph in Android.

Crea i contenuti da condividere per le azioni Open Graph nel modello ShareOpenGraphContent. Per una lista di tutti gli attributi, consulta il riferimento per ShareOpenGraphContent.

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "fitness.course")
        .putString("og:title", "Sample Course")
        .putString("og:description", "This is a sample course.")
        .putInt("fitness:duration:value", 100)
        .putString("fitness:duration:units", "s")
        .putInt("fitness:distance:value", 12)
        .putString("fitness:distance:units", "km")
        .putInt("fitness:speed:value", 5)
        .putString("fitness:speed:units", "m/s")
        .build();
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("fitness.runs")
        .putObject("fitness:course", object)
        .build();
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("fitness:course")
        .setAction(action)
        .build();