Se actualizó este documento.
La traducción en español no está disponible todavía.
Actualización del documento en inglés: 14 may. 2020
Actualización del documento en español: 14 dic. 2016

Facebook SDK for iOS FAQ & Troubleshooting

Puedes usar un único identificador de la aplicación de Facebook en varias aplicaciones de iOS, por ejemplo, en las versiones gratuita y de pago de tu aplicación.

Define un parámetro de sufijo para el esquema de URL, "FacebookUrlSchemeSuffix", en el archivo ".plist" de tu aplicación.

Nota: El sufijo solo funciona con caracteres alfanuméricos.

El archivo ZIP del SDK incluye "FacebookSDKStrings.bundle" con cadenas localizadas para los recursos del SDK. Incluye el paquete en tu aplicación y activa la internacionalización base como se describe en la documentación de Apple.

Dado que el cuadro de diálogo de contenido compartido nativo forma parte de la aplicación para iOS de Facebook, no se puede ejecutar en un simulador. Usa un dispositivo físico para probar el cuadro de diálogo de contenido compartido nativo. Estamos buscando maneras para que el cuadro de diálogo de contenido compartido nativo se pueda probar en el simulador.

Asegúrate de que al principio de cada archivo en el que intentas usar las clases del SDK de Facebook aparezcan las declaraciones de importación correctas. Por ejemplo:

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

Cuando se usan marcos en Objective-C, las clases que usan categorías para ampliar clases existentes no se cargan de forma automática.

Cuando intentas llamar a un método ampliado en estas clases, obtendrás el error "unrecognized selector sent to instance". Las clases que se usan desde Interface Builder de Xcode tampoco se cargan automáticamente, por ejemplo cuando creas una vista en tu archivo .xib y después la configuras como "FBSDKLoginButton" desde la interfaz de usuario de Interface Builder para agregar un botón "FBSDKLoginButton". De modo que, otra vez, cuando intentas llamar a métodos en estas clases, obtendrás el error "unrecognized selector sent to instance". Para solucionar este problema, tienes dos opciones.

Puedes cargar la clase manualmente en el delegado de tu aplicación "application:didFinishLaunchingWithOptions:", al llamar a:

[FBSDKLoginButton class];

O puedes agregar la marca de enlazador "-ObjC". Esta marca le indica al enlazador que cargue todos los archivos de objetos en el SDK que definan una clase o categoría de Objective-C. Este enfoque hará que nuestras clases funcionen de inmediato, pero aumentará el tamaño del archivo ejecutable (debido al código objeto adicional que se carga en la aplicación).

Para agregar la marca "-ObjC", haz clic en el objetivo del proyecto y selecciona la pestaña "Build Settings". Ahí, en la sección "Linking", haz doble clic en "Other Linker Flags" para agregar "-ObjC".

"FBSDKRequestConnection" usa "NSURLConnection", que requiere un RunLoop activo. Si lo usas fuera del subproceso principal, debes administrarlo por tu cuenta.

También puedes configurar la propiedad "delegateQueue" en "FBSDKRequestConnection".

Es común tener errores de configuración en el archivo ".plist". Asegúrate de que el archivo ".plist" incluye filas para "FacebookAppID" y "FacebookDisplayName" y la entrada "Tipo de URL" para "fb{app-id}".

Si obtienes resultados inesperados cuando realizas solicitudes de la API Graph, agrega este código antes de cualquier solicitud para activar el modo de depuración:

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

Usa "FBSDKLoggingBehaviorGraphAPIDebugWarning" si te gustaría suprimir los mensajes informativos y conservar solo las advertencias.

Si activas este comportamiento de registro, se agregará el parámetro "debug" a todas las solicitudes de la API Graph y cualquier error que se presente se mostrará en la consola.

Consulta más información sobre el modo de depuración de la API Graph aquí.

El SDK reportará una cancelación si el usuario toca de manera explícita un botón para cancelar en los cuadros de diálogo de inicio de sesión, o si vuelve manualmente a tu aplicación (lo que se conoce como cancelación implícita). Debes asegurarte de que no se inicia un proceso de inicio de sesión como parte del ciclo de vida del delegado de tu aplicación (por ejemplo, dentro de "application:openURL:sourceApplication:annotation:"), ya que eso imitaría una cancelación implícita. En caso necesario, envía el inicio de sesión más tarde a la cola principal, de modo que el ciclo de vida del delegado de la aplicación se complete primero.

  • El SDK de Facebook incluye un código para acceder al identificador de publicidad de Apple (IDFA), pero solo se ejecuta en algunos casos.
  • El SDK de Facebook para iOS solo accede a los IDFA en los casos siguientes: 1) si se muestran anuncios en la aplicación a través de Facebook Audience Network o 2) si la aplicación registra instalaciones de la aplicación u otros eventos de la aplicación para celulares para atribuirlos a tus campañas publicitarias.
  • Si no registras los eventos de la aplicación (con la clase "FBSDKAppEvents"), el SDK de Facebook no accederá a los IDFA. Además, el SDK de Facebook no necesita que se incluya "AdSupport.framework".
  • Si quieres realizar un seguimiento de los eventos de la aplicación sin recopilar los IDFA, puedes desactivar la recopilación en la sección de configuración avanzada del panel de aplicaciones.

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.

Si obtienes resultados inesperados cuando realizas solicitudes, activa la depuración de errores para "FBSDKGraphRequests". Agrega este código antes de cualquier solicitud:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Podrás depurar cualquier error al visualizar directamente las solicitudes y las respuestas de los servidores.

Plantéate examinar las otras constantes de "FBSDKLoggingBehavior*" definidas en "FBSDKSettings.h" para otras cosas que puedes registrar.