Este documento foi atualizado.
A tradução para Português (Brasil) não foi concluída ainda.
Atualização em inglês: 14 de mai de 2020
Atualização em Português (Brasil): 6 de dez de 2016

Facebook SDK for iOS FAQ & Troubleshooting

Você pode usar um ID do aplicativo do Facebook em vários aplicativos para iOS, por exemplo, entre versões gratuitas e pagas do seu aplicativo.

Defina um parâmetro de sufixo de esquema da URL, FacebookUrlSchemeSuffix, no arquivo .plist de seu aplicativo.

Observação: o sufixo só funciona com caracteres alfa.

O zip do SDK inclui um FacebookSDKStrings.bundle contendo strings localizadas para recursos do SDK. Inclua o pacote no seu aplicativo e [habilite a Internacionalização base] (https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingYourUserInterface/InternationalizingYourUserInterface.html#//apple_ref/doc/uid/10000171i-CH3-SW4), como descrito na documentação da Apple.

Já que o diálogo de compartilhamento nativo é parte do aplicativo do Facebook para iOS, ele não pode ser executado em um simulador. Use um dispositivo físico para testar o diálogo de compartilhamento nativo. Estamos buscando a melhor maneira de possibilitar o teste do diálogo de compartilhamento nativo no simulador.

Verifique se você tem as instruções de importação corretas no início de cada arquivo em que está tentando usar as classes de SDK do Facebook. Por exemplo:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

Ao usar estruturas no Objective-C, as classes que usam categorias para estender classes existentes não são carregadas automaticamente.

Ao tentar chamar um método que tenha sido estendido nessas classes, você verá um erro seletor não reconhecido enviado para a instância. As classes usadas do compilador de interface Xcode também não são carregadas automaticamente, por exemplo, quando você adiciona um FBSDKLoginButton à interface desenhando uma exibição no arquivo para depois defini-la como FBSDKLoginButton na interface do usuário do compilador de interface. Sendo assim, ao tentar chamar métodos nelas, você verá um erro seletor não reconhecido enviado para a instância. Para resolver esse problema, existem duas opções.

Você pode carregar a classe manualmente nas application:didFinishLaunchingWithOptions: do representante do seu aplicativo chamando:

[FBSDKLoginButton class];

Ou pode adicionar o sinalizador de vinculador -ObjC. Esse sinalizador ordena que o vinculador carregue todos os arquivos de objetos no SDK que definam uma classe ou categoria de Objective-C. Essa abordagem fará com que nossas classes funcionem de imediato, mas aumentará o tamanho do executável (devido ao código de objeto adicional carregado no aplicativo).

Para adicionar o sinalizador -ObjC, clique no destino do projeto e selecione a guia “Configurações de criação”. Em “Vinculação”, clique duas vezes em “Outros sinalizadores de vinculação” para adicionar -ObjC.

A FBSDKRequestConnection usa NSURLConnection que requer um [RunLoop] ativo (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html). Se você estiver usando-a no thread principal, precisará gerenciá-la por conta própria.

Se preferir, você pode definir a propriedade delegateQueue na FBSDKRequestConnection.

É comum haver erros de configuração na .plist. Verifique se a .plist contém linhas para FacebookAppID e FacebookDisplayName e a entrada de Tipo de URL para fb{app-id}.

Se você estiver recebendo resultados inesperados ao fazer solicitações à API de Gráfico, ative o modo de depuração adicionando este código antes de qualquer solicitação:

[FBSettings setLoggingBehavior:
    [NSSet setWithObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]];

Use FBSDKLoggingBehaviorGraphAPIDebugWarning se quiser suprimir as mensagens de nível de informação e manter somente os avisos.

A ativação desse comportamento de registro adicionará o parâmetro debug a todas as solicitações à Graph API e enviará todos os problemas ocorridos para o console.

Leia mais sobre o Modo de depuração da API de Gráfico aqui.

O SDK relatará um cancelamento se o usuário tocar deliberadamente no botão de cancelamento nos diálogos de login ou se voltar manualmente para o aplicativo (conhecido como cancelamento implícito). Você deve verificar se não está iniciando um fluxo de login como parte do ciclo de vida do representante do seu aplicativo (como o início de login dentro de application:openURL:sourceApplication:annotation:), já que isso replicará um cancelamento implícito. Se precisar, despache a inicialização de login mais tarde para a fila principal, para que o ciclo de vida do representante do aplicativo seja concluído primeiro.

  • O SDK do Facebook contém um código que permite acessar o Identificador de Publicidade da Apple (IDFA), mas esse código só pode ser executado em determinadas situações.
  • O SDK do Facebook para iOS só acessa os IDFAs nas seguintes situações: 1) se o aplicativo usar anúncios por meio da Rede de Públicos do Facebook (/products/audience-network/), ou 2) se o aplicativo registrar instalações de aplicativos ou outros Eventos do Aplicativo para atribuir esses eventos a campanhas de anúncio.
  • Se você não registrar os Eventos do Aplicativo com a classe FBSDKAppEvents, o SDK do Facebook não acessará os IDFAs. Além disso, o SDK do Facebook não requer o AdSupport.framework.
  • Caso queira rastrear os Eventos do Aplicativo sem coletar o IDFA, desative a opção de coleta de IDFA diretamente no painel do aplicativo na seção de configurações avançadas.

The Share dialog notifies its delegate's sharer:didCompleteWithResults: and sharerDidCancel: methods upon a user action.

  • sharer:didCompleteWithResults: when the user successfully shares. If that user has not logged in with Facebook Login, this method will also be called if the user clicks on Cancel.
  • sharerDidCancel: when someone clicks Share dialog's X button; or if they have logged in with Facebook Login and click on Cancel.

Se você estiver recebendo resultados inesperados ao fazer solicitações, ative a depuração para FBSDKGraphRequests. Adicione este código antes das solicitações:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Você poderá depurar os problemas vendo as solicitações e respostas dos servidores diretamente.

Pode ser interessante procurar outras coisas que possam ser registradas nas outras constantes FBSDKLoggingBehavior* definidas em FBSDKSettings.h.