Como compartilhar no Android

Depois que você integrar o Login do Facebook, o Compartilhamento do Facebook ou os Jogos do Facebook, alguns eventos do app serão automaticamente registrados e coletados para o Gerenciador de Eventos, a menos que você desabilite o registro automático. Recomendamos que todos os desenvolvedores de apps que usam o Login do Facebook, o Compartilhamento do Facebook ou os Jogos do Facebook entendam como esse recurso funciona. Para saber mais sobre as informações que são coletadas e sobre como desabilitar o registro automático de eventos, consulte Registro automático de eventos do app.

Este guia explica como permitir que os usuários do seu app Android compartilhem conteúdo do app no Facebook. O conteúdo do seu app aparece na linha do tempo da pessoa que o compartilhou. O conteúdo compartilhado pelos seus usuários nas próprias linhas do tempo também pode aparecer nos Feeds dos amigos deles. Além disso, os usuários podem compartilhar conteúdo do seu app no Facebook Messenger.

Ao implementar o compartilhamento, seu app não pode preencher automaticamente o conteúdo a ser compartilhado. O preenchimento automático de conteúdo não atende às Políticas do Desenvolvedor.

As fotos de exemplo a seguir mostram os diálogos de compartilhamento no seu app, à esquerda, e a publicação resultante no app Facebook, à direita.

Introdução ao compartilhamento

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 ele seja uma dependência no Maven.

  1. No projeto, abra your_app | Gradle Scripts | build.gradle (Project) e adicione o seguinte repositório à seção buildscript { repositories {}}:

    mavenCentral() 
    
  2. No projeto, abra your_app | Gradle Scripts | build.gradle (Module: app) e adicione a seguinte declaração de compilação à seção dependencies{}:

    compile 'com.facebook.android:facebook-share:latest.release'
    
  3. Crie o projeto.

  4. Configure e vincule adequadamente seu ID do app do Facebook ao seu app Android.

  5. Gere um hash de chave de desenvolvimento do Android e adicione o hash à página Exemplo de aplicativo nas configurações para desenvolvedores. Consulte Crie um hash de chave de desenvolvimento e Como executar exemplos de aplicativos para mais detalhes.

  6. Adicione um ContentProvider ao seu arquivo AndroidManifest.xml e defina {APP_ID} como o ID do app:

    <provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true"/>
    
  7. Caso seu aplicativo se destine ao Android 11 ou a versões mais recentes, adicione o seguinte bloco de consultas ao arquivo AndroidManifest.xml para que o app Facebook fique visível ao seu app:

    <queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>
  8. Adicione uma Facebook Activity ao projeto e inclua isso no arquivo AndroidManifest.xml.

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 app.

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

Veja aqui um exemplo de como acionar o compartilhamento:

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

Para ver a prévia de um compartilhamento de link com o Google Play ou a App Store, insira sua URL no Depurador de Compartilhamento.

Se o compartilhamento do seu app contiver um link para algum app 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 app diretamente da loja (caso não haja uma imagem, o compartilhamento não incluirá imagem).

Fotos

As pessoas podem compartilhar fotos do seu app no Facebook com o Diálogo de compartilhamento. Para compartilhar, os usuários precisam ter instalado o app do Facebook para Android nativo, versão 7.0 ou posterior.

Crie seu conteúdo de compartilhamento 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 app podem compartilhar vídeos no Facebook com o diálogo de compartilhamento.

Crie seu conteúdo de compartilhamento 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 app para o Facebook com o diálogo de compartilhamento. Observe o seguinte:

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

Crie seu conteúdo de compartilhamento 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 acionar uma interface de compartilhamento do Facebook.

Botões

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


Botão Compartilhar

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

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

Diálogo de compartilhamento

O Diálogo de compartilhamento muda para o app do Facebook para Android nativo e devolve o controle ao seu app 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 app. Se o app Facebook não estiver instalado, o diálogo de compartilhamento será substituído automaticamente pelo 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>() { ... });
    }

Depois, 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 no seu onActivityResult para processar 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);
}

Se você estiver usando atividades ou fragmentos do AndroidX, não será necessário substituir onActivityResult.

Diálogo de mensagens

O diálogo de mensagem muda para o app Messenger para Android e devolve o controle ao seu app 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 app.

MessageDialog.show(activityOrFragment, content);

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 ao compartilhamento de um link.

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

Tópicos avançados

Fallback de compartilhamento integrado

Em versões anteriores do SDK do Facebook para Android, seu app precisava verificar se havia um app Facebook nativo instalado para abrir o diálogo de compartilhamento. Se a pessoa não tivesse o app 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 app Facebook nativo está instalado automaticamente. Se não estiver instalado, o SDK direcionará as pessoas ao navegador-padrão e abrirá um diálogo do feed.

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