Como compartilhar no Android

Este guia detalha como ativar o compartilhamento de seu aplicativo do Android no Facebook. Quando alguém compartilha algo do seu aplicativo, o conteúdo aparece na Linha do Tempo dessa pessoa e pode aparecer nos Feeds de Notícias dos amigos dela.

As pessoas também podem compartilhar conteúdo do seu aplicativo no Facebook Messenger.

Pré-requisitos

Antes de poder compartilhar com o Facebook pelo seu aplicativo, você precisa vincular ou baixar o SDK de compartilhamento do Facebook para Android.

O SDK de compartilhamento para Android é um componente do SDK do Facebook para Android. Para usar o SDK de compartilhamento do Facebook no seu projeto, faça com que seja uma dependência no Maven ou baixe-o. Escolha o método que você prefere no botão seguir.

Vincular o SDK com o Maven

  1. No seu projeto, abra seu_aplicativo | Gradle Scripts | build.gradle (Project) e adicione o que vem a seguir à buildscript { repositories {}}seção para baixar o SDK do Repositório central do Maven:
    mavenCentral() 
  2. No seu projeto, abra seu_aplicativo | Gradle Scripts | build.gradle (Module: app) e adicione a declaração de compilação a seguir à seção dependencies{} para compilar a última versão do SDK:
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. Crie seu projeto.

Baixar o SDK

Para baixar o SDK, clique no botão a seguir.

Baixar o SDK

Quando você usa o SDK de compartilhamento do Facebook, os eventos no seu aplicativo são registrados e coletados automaticamente para o Facebook Analytics, a menos que você desabilite o log de eventos automático. Para saber mais sobre as informações que são coletadas e sobre como desabilitar o log de eventos automático, confira o tópico Log de eventos automático do aplicativo.

Mais pré-requisitos

Além disso, você precisa fazer o seguinte:

Para mais detalhes sobre esses requisitos, veja Android – Introdução.

Você também precisa configurar um ContentProvider no AndroidManifest.xml, em que {APP_ID} é o ID do seu aplicativo:

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

Ao implementar o compartilhamento, seu aplicativo não deve preencher o conteúdo a ser compartilhado automaticamente. Isso viola a Política da Plataforma do Facebook. Veja Política da Plataforma do Facebook, seção 2.3.

Conteúdo de modelagem

As versões 4.0 e posteriores dos SDKs do Facebook têm novos modelos para compartilhar conteúdo. Cada tipo de conteúdo que as pessoas querem compartilhar tem uma classe que pode ser usada para representá-lo. Depois de modelar o conteúdo, adicione uma interface de compartilhamento ao seu aplicativo.

Quando as pessoas compartilham links do seu aplicativo no Facebook, é incluída uma contentURL com o link que será compartilhado. Crie seu compartilhamento de conteúdo de links no modelo ShareLinkContent. Para obter uma lista de todos os atributos, consulte a referência ShareLinkContent.

A partir de 18 de abril de 2017, os parâmetros a seguir não serão suportado pela Graph API versão 2.9 e posterior. Para a versão 2.8 e inferiores, os parâmetros continuarão funcionando até 17 de julho de 2017.

  • contentTitle, representa o título do conteúdo no link
  • imageURL, a URL da imagem em miniatura que aparecerá na publicação
  • contentDescription do conteúdo, normalmente de duas a quatro frases

Veja aqui um exemplo de como você pode acionar o compartilhamento:

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

Para visualizar um compartilhamento de link para o Google Play ou para a App Store, insira sua URL no Depurador de Compartilhamento.

Se o compartilhamento do seu aplicativo contiver um link para algum aplicativo no Google Play ou na App Store, a descrição e a imagem incluídas no compartilhamento serão ignoradas. Nesse caso, o título e imagem do aplicativo diretamente da loja (caso não haja uma imagem, o compartilhamento não incluirá imagem).

Fotos

As pessoas podem compartilhar fotos de seu aplicativo no Facebook com o Diálogo de compartilhamento ou com uma interface personalizada.

  • As fotos devem ter menos de 12 MB
  • Os usuários precisam ter instalado o aplicativo do Facebook para Android nativo, versão 7.0 ou posterior

Crie seu compartilhamento de conteúdo de fotos no modelo SharePhotoContent. Para obter uma lista de todos os atributos, consulte a referência SharePhotoContent.

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

Vídeos

As pessoas que usam seu aplicativo podem compartilhar vídeos no Facebook com o Diálogo de compartilhamento ou com uma interface personalizada.

Os vídeos devem ter menos de 12 MB.

Crie seu compartilhamento de conteúdo de vídeos no modelo ShareVideoContent. Para obter uma lista de todos os atributos, consulte a referência ShareVideoContent.

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

Multimídia

As pessoas podem compartilhar uma combinação de fotos e vídeos do seu aplicativo para o Facebook com o diálogo de compartilhamento. Observe o seguinte:

  • Os usuários precisam ter instalado o aplicativo do Facebook para Android nativo, versão 71 ou posterior.
  • As fotos devem ter menos de 12 MB.
  • Os vídeos devem ter menos de 12 MB.
  • As pessoas podem compartilhar no máximo seis fotos e vídeos por vez.

Crie seu conteúdo de compartilhamento de multimídia com o modelo ShareMediaContent. Para obter uma lista de todos os atributos, consulte a referência 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);

Adicionar interfaces de compartilhamento

Depois de tratar do conteúdo na criação de um modelo, você pode disparar uma interface de compartilhamento do Facebook ou criar a sua própria que faz chamadas à Graph API.

Botões

O Facebook oferece botões nativos para disparar compartilhamento no Android.


Com o lançamento da versão 4.28.0 do SDK do Facebook para Android, o Botão Curtir para Android ficou obsoleto. Ele terá suporte até 5 de fevereiro de 2018.

Botão Curtir

O botão Curtir é uma maneira rápida de compartilhar conteúdo com os amigos. Com um único toque no botão Curtir, a pessoa "curte" conteúdo no seu aplicativo e o compartilha no Facebook. O botão Curtir pode ser usado para curtir uma página do Facebook ou algum objeto de Open Graph e pode ser referenciado por URL ou ID. Para adicionar um botão Curtir, adicione o seguinte trecho de código à sua visualização:

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

Botão Compartilhar

O botão Compartilhar chama um diálogo de compartilhamento. Para adicionar um botão Compartilhar, adicione o seguinte trecho de código à sua visualização:

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

Com o lançamento da versão 4.28.0 do SDK do Facebook, o Botão Enviar ficou obsoleto. Ele terá suporte até 5 de fevereiro de 2018.

Botão Enviar

O botão Enviar permite que as pessoas enviem fotos, vídeos e links de forma privada aos amigos e contatos usando o Facebook Messenger. O botão Enviar chama uma caixa de diálogo de mensagens. Para adicionar um botão Enviar ao seu aplicativo, adicione o seguinte trecho de código à sua visualização:

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

Diálogo de compartilhamento

O Diálogo de compartilhamento muda para o aplicativo do Facebook para Android nativo e devolve o controle ao seu aplicativo depois da publicação. Dependendo do SDK que você está usando, as pessoas podem precisar tocar no ícone de seta para trás para voltar ao seu aplicativo. Se o aplicativo do Facebook não estiver instalado, o diálogo Compartilhar fará fallback automaticamente para o diálogo baseado na Web.

ShareDialog.show(activityOrFragment, content);

Por exemplo, para mostrar o ShareDialog de um link na sua atividade, crie uma instância ShareDialog no método 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>() { ... });
    }

Em seguida, mostre o ShareDialog:

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

Por fim, chame o callbackManager do SDK em seu onActivityResult para lidar com a resposta:

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

Caixa de diálogo de mensagens

O diálogo de mensagem muda para o aplicativo do Messenger para Android e devolve o controle ao seu aplicativo depois da publicação. Dependendo do SDK que você está usando, as pessoas podem precisar tocar no ícone de seta para trás para voltar ao seu aplicativo.

MessageDialog.show(activityOrFragment, content);

Recursos adicionais

Ao usar o diálogo de compartilhamento do Facebook, você tem opções adicionais que não estão disponíveis ao compartilhar usando a API.

Hashtags

Você pode especificar uma única hashtag para ser exibida com um vídeo, foto ou link compartilhado. Essa hashtag também é exibida no diálogo de compartilhamento, e as pessoas têm a oportunidade de removê-la antes de publicar.

Veja, a seguir, um exemplo de como adicionar uma hashtag para o compartilhamento de um link.

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

Compartilhamento de citações

Você pode permitir que as pessoas destaquem um texto para que ele seja exibido como uma citação com um link compartilhado. Como alternativa, você pode predefinir uma citação, por exemplo, uma citação em um artigo, para que ela seja exibida com o link compartilhado. Em ambos os casos, a citação é exibida no seu próprio campo, separada dos comentários de usuários.

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

Tópicos avançados

Fallbacks de compartilhamento interno

Em versões anteriores do SDK para Android, o aplicativo devia verificar se havia um aplicativo do Facebook nativo instalado para poder abrir o diálogo de compartilhamento. Se a pessoa não tivesse o aplicativo instalado, você tinha que fornecer seu próprio código para chamar uma caixa de diálogo de fallback.

Agora, o SDK verifica se o aplicativo do Facebook nativo está instalado automaticamente. Se não estiver, o SDK envia as pessoas para seus navegadores padrão e abre uma caixa de diálogo Feed. Se alguém quiser compartilhar uma publicação de Open Graph, o SDK abre um diálogo de compartilhamento Web.

Com o App Links, você tem um link de volta para seu aplicativo em publicações no Facebook feitas de seu aplicativo. Quando as pessoas clicam em uma publicação do Facebook feita do seu aplicativo, ele se abre e você pode até vincular a conteúdo específico no aplicativo.

Interface personalizada

Se quiser usar sua própria interface no compartilhamento, você precisará:

  • Criar uma interface personalizada que publique no /me/feed do ponto de extremidade da Graph API
  • Implementar o Login no Facebook no seu aplicativo
  • Solicitar a permissão publish_actions quando as pessoas entrarem em seu aplicativo

Veja o código para publicar um link no Facebook de sua própria interface:

ShareApi.share(content, null);

Como compartilhar Publicações de Open Graph

As Publicações de Open Graph permitem que as pessoas compartilhem conteúdo avançado e estruturado por uma API fortemente digitada definida por ações e objetos de Open Graph. Essas publicações voltam para seu aplicativo ou para a página da Loja de aplicativos de seu aplicativo.

Para saber mais sobre como adicionar publicações de Open Graph, veja Publicações de Open Graph em Android.

Crie seu compartilhamento de conteúdo para ações de Open Graph no modelo ShareOpenGraphContent. Para obter uma lista de todos os atributos, consulte a referência 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();