Instalando o react-native-fbsdk do jeito certo

Ou como adicionar funcionalidades do Facebook no seu aplicativo React Native sem sofrimento.

Luciano Lima
React Brasil
Published in
6 min readMay 6, 2018

--

Já faz um tempo que adicionar o package react-native-fbsdk tem se tornado uma tarefa problemática e desestimulante. O repositório não permite criar issues e as issues abertas no repositório do React Native não ajudam a solucionar o processo de instalação desse package em nossos aplicativos. Finalmente vamos saber qual é de fato o passo a passo para adicionar corretamente esse package sem causar erros no build de nossa aplicação.

Como o React Native sofre atualizações constantes, segue as versões utilizadas nesse artigo:

react-native: 0.54.4
react: 16.3.0-alpha.1
react-native-fbsdk: 0.7.0

1 — Instalando o package

Como de praxe, inicie um novo aplicativo com react-native init example e aguarde até que o processo finalize. Em seguida instale o package do Facebook:

yarn add react-native-fbsdk
react-native link react-native-fbsdk

2 — Configurando o Facebook no iOS

Precisamos agora adicionar o SDK do Facebook para iOS. A documentação nos diz que precisamos baixar os arquivos do SDK para a pasta Documents de nossa máquina. Não caia nessa! A melhor forma de instalar o SDK é a seguinte:

2.1 Crie um aplicativo no Facebook.

Clique em Add a New App

Forneça os dados de seu aplicativo

2.2 Adicione a plataforma iOS ao seu aplicativo.

Clique em Configurações e escolha a opção Básico. Clique em Adicionar plataforma

Escolha iOS

2.3 Configure seu aplicativo

Coloque o bundle ID do seu aplicativo e ative a opção Login único, salvando em seguida.

2.4 Adicione o SDK do Facebook

No final, clique no botão Início rápido e na tela seguinte em Baixar SDK para fazer o download do SDK para sua máquina.

Agora no seu aplicativo, vá até o diretório ios e crie uma pasta chamada Frameworks (case sensitive).

Copie Bolts.framework, FBSDKCoreKit.framework, FBSDKLoginKit.framework e FBSDKShareKit.framework para o diretório Frameworks que você criou.

2.5 Adicione os frameworks ao seu projeto através do Xcode

Abra seu aplicativo no Xcode (clicando duas vezes no arquivo example/ios/example.xcodeproj).

No Project Navigator (lateral esquerda) do Xcode, selecione o diretório Frameworks, clique com o botão direito do mouse e escolha Add Files to "example"…

Selecione os frameworks do SDK do Facebook e pressione o botão Add

Agora basta seguir o tutorial oficial a partir da etapa 4. Rode o aplicativo com react-native run-ios para testar seu aplicativo.

Se você receber um warning com a seguinte mensagem:
RCTBridge required dispatch_sync to load RCTDevLoadingView. This may lead to deadlocks apenas remova o aplicativo e instale de novo e a mensagem sumirá.

3 — Configurando o Facebook no Android

3.1 Pré-configuração do aplicativo

No arquivo android/build.gradle adicione o repositório do Google (linhas 19 a 21).

Mude a versão do SDK do Android utilizado. Por padrão o React Native vem configurado para usar a API 23. Aumente para a API 26 deixando da seguinte forma:

3.2 Adicione a Plataforma Android para seu aplicativo do Facebook

Na tela de Configurações, na opção Básico, clique em Adicionar Plataforma

E no modal escolha a opção Android

3.3 Adicione configurações do seu aplicativo Android

Na próxima tela forneça o id de sua aplicação, o nome completo da sua Activity e ative o Login Único

Agora será necessário obter o key hash de suas keystores. Será necessário colocar tanto o key hash de debug como o de release.

Para obter o key hash, você vai precisar do alias de sua keystore e da senha. Para a keystore de debug, no terminal, execute o seguinte comando:

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

A senha é android. Para a keystore de release, basta substituir o alias androiddebugkey e a localização de sua keystore, e depois fornecer a senha.

No terminal você dete ter uma saída parecida com essa:

~/apps/example/android: keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Informe a senha da área de armazenamento de chaves: android
qiovt/+HyboJyKnIDiZm2YM3Y9Q=

Copie a saída completa (incluindo o =) e coloque nas configurações de seu aplicativo no Facebook.

Salve as alterações. Caso apareça um alerta sobre o nome do pacote escolha a opção Usar este nome de pacote. Esse alerta aparece quando seu aplicativo ainda não está disponível no Google Play.

3.4 Finalizando a configuração do seu aplicativo

No arquivo AndroidManifest.xml, certifique-se de que seu app está com a permissão de internet

<uses-permission android:name="android.permission.INTERNET" />

Dentro da tag Application, adicione o meta-data do Facebook

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="br.com.example.app">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
</application>
</manifest>

Agora no arquivo strings.xml localizado em android/app/src/main/res/values adicione o ID de seu aplicativo no Facebook.

<resources>
<string name="app_name">example</string>
<string name="facebook_app_id">207638560019186</string>
</resources>

Em MainApplication.java importe o CallbackManager

import com.facebook.CallbackManager;

Adicione uma propriedade estática do CallbackManager

public class MainApplication extends Application implements ReactApplication {  private static CallbackManager mCallbackManager = CallbackManager.Factory.create();  protected static CallbackManager getCallbackManager() {
return mCallbackManager;
}
...

E passe essa propriedade estática como parâmetro do FBSDKPackage no método getPackages

    @Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new FBSDKPackage(mCallbackManager)
);
}

No MainActivity.java, importe o Intent

import android.content.Intent;

E adicione o listener do onActivityResult

public class MainActivity extends ReactActivity {    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
MainApplication.getCallbackManager().onActivityResult(requestCode, resultCode, data);
}

Pronto! Agora você está com o Facebook configurado no seu aplicativo React Native e pode usar qualquer método do FBSDK como login, share, analytics ou graph API. Segue o repositório com essa configuração feita e com botão de login no Facebook funcionando:

--

--

Luciano Lima
React Brasil

Desenvolvedor Web e Mobile. Amante de tecnologia e TI em geral. Além de ser fã de games e mangás!