Introdução ao SDK do Facebook para Android

Este documento explica como integrar o seu app Android ao Facebook usando o SDK do Facebook para Android. A versão atual do SDK do Facebook para Android é a 12.0.0, que exige a API do Android 15. Para saber mais sobre versões e recursos, consulte SDK do Facebook para Android.

Quando você usa o SDK do Facebook, alguns eventos no aplicativo são registrados e coletados automaticamente para o Facebook Analytics, a menos que desative o log de eventos automático. Para saber mais sobre as informações que são coletadas e como desativar o log de eventos automático, acesse Log automático de eventos do aplicativo.

Configure o seu app para usar o SDK do Facebook para Android de uma destas maneiras:

  • Usando o Início Rápido.
  • Configurando o projeto com o SDK do Facebook para Android.

Início rápido

Para obter um ID do app do Facebook, configure o seu app e importe o SDK do Facebook para Android. Clique no botão abaixo e siga as instruções.

Início rápido para Android

Antes de começar

Você precisará do seguinte:

Informações sobre a permissão de ID de publicidade

Desde a versão 13.0.0, os apps criados com o SDK do Facebook para Android adicionam automaticamente a permissão de ID de publicidade ao seu app. Para saber mais, consulte ID de publicidade na Ajuda do Play Console.

Em alguns casos, é recomendado recusar a permissão de ID de publicidade no app. Por exemplo, caso os seus clientes sejam crianças e famílias, essa permissão talvez não seja relevante. Para excluir a permissão de ID de publicidade do app, siga as instruções descritas mais abaixo neste documento.

Configuração do Android Studio

Criar o seu projeto

Adicione o SDK do Facebook como uma dependência de compilação e importe-o para usá-lo em um projeto do Android Studio.

  1. Acesse Android Studio | New Project | Minimum SDK.

  2. Selecione a versão API 15: Android 4.0.3 (IceCreamSandwich) ou mais recente e crie o novo projeto.

  3. Abra o arquivo Gradle Scripts | build.gradle (Project: <your_project>) e adicione o código a seguir:

    mavenCentral()
    
  4. Salve e feche o arquivo build.gradle (Project: <your_project>).

  5. Abra o arquivo Gradle Scripts | build.gradle (Module: app) e adicione este código à seção dependencies:

    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    

  6. Salve e feche o arquivo build.gradle (Module: app).

  7. Crie o projeto. Agora, é possível importar com.facebook.FacebookSdk para o app.

Atualizar o manifesto

Adicione o ID do app e o token de cliente ao arquivo de strings e atualize o arquivo de manifesto. Para isso, siga estas instruções:

  1. Abra o arquivo /app/res/values/strings.xml no projeto do app.

  2. Adicione os elementos string com os nomes facebook_app_id e facebook_client_token e defina os valores do ID do app e token de cliente. Por exemplo, se o ID do app for 1234 e o token do cliente for 56789, o seu código terá esta aparência:

    <string name="facebook_app_id">1234</string><string name="facebook_client_token">56789</string>
  3. Abra o arquivo /app/manifests/AndroidManifest.xml no projeto do app.

  4. Adicione elementos meta-data ao elemento application para o ID do app e o token do cliente:

    <application android:label="&#064;string/app_name" ...>
        ...
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/><meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
  5. Adicione um elemento uses-permission ao manifesto depois do elemento application:

    <uses-permission android:name="android.permission.INTERNET"/>
  6. (Opcional) Para recusar a permissão de ID de publicidade, adicione um elemento uses-permission ao manifesto depois do elemento application:

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
  7. Crie o projeto.

Habilitar o compartilhamento

Se você compartilha links, imagens ou vídeos do seu app, declare a autoridade FacebookContentProvider no manifesto. Para isso, siga estas instruções:

  1. Abra o arquivo /app/manifests/AndroidManifest.xml no projeto do app.

  2. Adicione o elemento provider ao manifesto para a autoridade FacebookContentProvider. Inclua o ID do app no final do valor authorities. Por exemplo, se o ID do app for 1234, a declaração será semelhante a:

    <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
    
  3. Crie o projeto.

Executar exemplos de app

Os exemplos abaixo vêm com o SDK do Facebook para Android:

  • HelloFacebookSample: demonstra atualizações de status, carregamento de foto e acesso do perfil.

Teste os exemplos importando o SDK do Facebook em um projeto do Android Studio. Os exemplos têm uma dependência de projeto, em vez de uma dependência de repositório central via Maven Central ou JCenter. Ou seja, quando uma cópia local do SDK é atualizada, os exemplos refletem essas alterações.

Para executar exemplos de app rapidamente, gere hashes de chave para os seus ambientes de desenvolvimento. Adicione-as ao seu perfil de desenvolvedor do Facebook nos exemplos de app. A Keytool, usada para gerar os hashes de chave, está incluída no Java SE Development Kit (JDK) que você instalou como parte da configuração do seu ambiente de desenvolvimento. O OpenSSL está disponível para baixar em OpenSSL.

No OS X, execute:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

No Windows, você precisa do seguinte:

Insira o código abaixo em um prompt de comando da pasta SDK para Java. Essa ação gera uma string com 28 caracteres.

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

Acesse o site Meta for Developers. Entre no Facebook e acesse Configurações do desenvolvedor no menu suspenso no canto superior direito:

Selecione Exemplo de aplicativo no menu para adicionar e salvar o hash de chave ao seu perfil:

Se você estiver desenvolvendo em diferentes máquinas, será possível adicionar múltiplos hashes de chave.

Agora, é possível compilar e executar todos os exemplos, inclusive os que usam o Login do Facebook.

Criar um hash de chave de desenvolvimento

O Facebook usa o hash de chave para autenticar as interações entre o seu app e o app do Facebook. Se você tem apps que usam o Login do Facebook, será necessário adicionar o hash de chave do Android ao seu perfil de desenvolvedor do Facebook.

Também será necessário gerar e definir um hash de chave de versão para o app que você lança para você.

No OS X e no Windows, é possível gerar um hash de chave ou usar o valor retornado por Settings.getApplicationSignature(Context). Para mais instruções, veja Executar exemplos de aplicativo.

Criar um hash de chave de versão

Para autenticar a troca de informações entre o seu app e o Facebook, é necessário gerar um hash de chave de versão e adicioná-lo às configurações do Android do ID do app do Facebook. Sem essa informação, a sua integração com o Facebook pode não funcionar de forma adequada quando você lançar o app na App Store.

Em uma etapa anterior, você precisa atualizar as suas configurações de desenvolvedor do Facebook com os hashes de chave dos ambientes de desenvolvimento.

Quando você publica o seu app, ele normalmente tem uma assinatura diferente do seu ambiente de desenvolvimento. Por isso, crie um hash de chave de versão e adicione-o às configurações do Android do ID do app do Facebook.

Para gerar um hash da chave de versão, execute o seguinte comando no Mac ou Windows substituindo o alias de chave de versão e o caminho para o keystore.

No Mac OS, execute:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

No Windows, você precisa do seguinte:

Execute o código abaixo em um prompt de comando da pasta SDK para Java:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64

Use a senha que você definiu quando criou pela primeira vez a chave de versão.

Essa ação gera uma string de 28 caracteres. Copie e cole esse hash de chave de lançamento nas configurações do Android do número de identificação do app do Facebook.

Verifique também se as configurações do Android do ID do app do Facebook têm o nome correto do pacote e a classe da atividade principal do seu pacote Android.

Usar o SDK do Facebook para Android com o Maven

Declare a dependência do Maven com a versão mais recente do SDK do Facebook para Android.

<dependency>
  <groupId>com.facebook.android</groupId>
  <artifactId>facebook-android-sdk</artifactId>
  <version>PUT_LATEST_VERSION_HERE</version>
</dependency> 

Resolução de problemas em exemplos de app

Caso você tenha algum problema ao executar um exemplo de app, isso pode estar relacionado ao hash de chave. Talvez você veja um destes cenários:

  • Um diálogo Entrar nativo aparece. No entanto, depois de aceitar as permissões, você ainda está desconectado. O logcat também tem uma exceção:
12-20 10:23:24.507: W/fb4a:fb:OrcaServiceQueue(504):
com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id
  • Um diálogo Entrar não nativo aparece com uma mensagem de erro ''..App is Misconfigured for facebook login...''.

Verifique se você está usando o hash de chave correto. I

Também é possível alterar manualmente a amostra de código para usar o hash de chave correto. Por exemplo, na classe HelloFacebookSampleActivity, faça uma alteração temporária em onCreate():

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {
        
    } catch (NoSuchAlgorithmException e) {
        
    }
    
    ...

Salve as alterações e execute novamente a amostra. Busque na saída do logcat uma mensagem semelhante a esta:

12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

Salve o hash de chave no seu perfil de desenvolvedor. Execute novamente as amostras e verifique se você consegue entrar.