Preguntas frecuentes y solución de problemas del SDK de Facebook para iOS

Si lo deseas, puedes usar un identificador de aplicación de Facebook en varias aplicaciones para iOS (por ejemplo, en distintas versiones gratuitas y de pago de tu aplicación).

Define un parámetro de sufijo de esquema de URL ("FacebookUrlSchemeSuffix") en el archivo ".plist" de la aplicación.

Nota: El sufijo solo puede contener caracteres alfabéticos.

El archivo .zip del SDK incluye un paquete "FacebookSDKStrings.bundle" que contiene cadenas localizadas para los recursos del SDK. Inclúyelo en tu aplicación y activa la internacionalización de base, tal como se describe en la documentación de Apple.

El cuadro de diálogo de contenido compartido nativo forma parte de la aplicación para iOS de Facebook y, por ese motivo, no puede funcionar en un simulador. Usa un dispositivo físico para probar este cuadro de diálogo. Actualmente estamos trabajando para poder probarlo en el simulador.

Asegúrate de haber importado las instrucciones "import" correctas en la parte superior de cada archivo donde intentas usar las clases del SDK de Facebook. Por ejemplo:

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

Al usar marcos con Objective-C, las clases que usan categorías para extender las clases existentes no se cargan de forma automática.

Cuando intentas llamar a un método que se ha extendido en estas clases, se produce el error "unrecognized selector sent to instance". Las clases que se usan desde Interface Builder en Xcode tampoco se cargan automáticamente (por ejemplo, si se añade la clase "FBSDKLoginButton" a la interfaz creando una visualización en el archivo .xib y, a continuación, se establece como "FBSDKLoginButton" desde la interfaz de usuario de Interface Builder). Por eso, cuando se intenta llamar a métodos desde estas clases, se produce el error "unrecognized selector sent to instance". Tienes dos opciones para resolver este problema.

Puedes cargar la clase de forma manual en el método "application:didFinishLaunchingWithOptions:" del delegado de la aplicación con la llamada siguiente:

[FBSDKLoginButton class];

La otra opción es añadir la marca del enlazador "-ObjC". Con esta marca se indica al enlazador que cargue todos los archivos de objeto en el SDK que definen una clase o categoría de Objective-C. De este modo se consigue que todas las clases estén listas para funcionar desde el primer momento, aunque aumenta el tamaño del archivo ejecutable (debido al código de objeto adicional que se carga en la aplicación).

Para añadir la marca "-ObjC", haz clic en el objetivo del proyecto y selecciona la pestaña "Build Settings". Desde aquí, ve a "Linking" y haz doble clic en "Other Linker Flags" para añadir la marca "-ObjC".

La clase "FBSDKRequestConnection" usa "NSURLConnection", que requiere un objeto "RunLoop" activo. Si se utiliza fuera del subproceso principal, deberás administrarlo por tu cuenta.

De forma alternativa, puedes establecer la propiedad "delegateQueue" en "FBSDKRequestConnection".

Es habitual que el archivo ".plist" presente errores de configuración. Asegúrate de que este archivo incluya filas para los objetos "FacebookAppID" y "FacebookDisplayName", así como una entrada con el tipo de URL para la propiedad "fb{app-id}".

Si obtienes resultados inesperados al realizar solicitudes de la API Graph, activa el modo de depuración añadiendo este código antes de las distintas solicitudes:

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

Usa el método "FBSDKLoggingBehaviorGraphAPIDebugWarning" si quieres eliminar los mensajes informativos y mantener solo las advertencias.

Al activar este comportamiento de registro, se añade el parámetro "debug" a todas las solicitudes de la API Graph y aparecen en la consola todos los problemas que se producen.

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

El SDK informará de una cancelación si el usuario toca explícitamente el botón "Cancelar" en los cuadros de diálogo de inicio de sesión o si cambia de aplicación de forma manual para volver a la tuya (proceso conocido como "cancelación implícita"). Debes asegurarte de no ejecutar ningún proceso de inicio de sesión como parte del ciclo de vida del delegado de la aplicación (por ejemplo, dentro del método "application:openURL:sourceApplication:annotation:"), ya que esta operación tendría el mismo efecto que una cancelación implícita. Si no puedes evitarlo, resuelve el inicio de sesión más tarde en la cola principal, de forma que el ciclo de vida del delegado de la aplicación se haya completado antes.

  • El SDK de Facebook incluye código para acceder al identificador de publicidad de Apple (IDFA), pero ese código solo se ejecuta en algunas situaciones.
  • El SDK de Facebook para iOS solo accede a los IDFA en los casos siguientes: 1) si la aplicación muestra en sí misma anuncios a través de Facebook Audience Network, o 2) si la aplicación registra descargas de la aplicación u otros eventos de esta para móviles con el objetivo de atribuirlos a tus campañas publicitarias.
  • Si no registras eventos de la aplicación (a través de la clase FBSDKAppEvents), el SDK de Facebook no accederá a los IDFA. Además, el SDK de Facebook no necesita incluir el marco AdSupport.framework.
  • Si quieres realizar un seguimiento de los eventos de la aplicación sin recopilar los IDFA, puedes desactivar la recopilación de estos identificadores en la sección de configuración avanzada del panel de aplicaciones.

En el cuadro de diálogo de contenido compartido se muestran las notificaciones sobre los métodos "sharer:didCompleteWithResults:" y "sharerDidCancel:" del delegado de dicho cuadro cuando tiene lugar una acción de usuario.

  • Método "sharer:didCompleteWithResults:" cuando el usuario comparte contenido correctamente. Además, también se incluirá una clave "postId" en el diccionario "results" si el usuario le ha concedido permisos "publish_actions" a la aplicación. También se llamará a este método si el usuario no ha accedido mediante el inicio de sesión con Facebook y hace clic en "Cancelar".
  • Método "sharerDidCancel:" cuando una persona hace clic en el botón "X" del cuadro de diálogo de contenido compartido, o accede mediante el inicio de sesión con Facebook y hace clic en "Cancelar".

Si obtienes resultados inesperados al realizar solicitudes, activa la depuración para la clase "FBSDKGraphRequests". Añade este código antes de las solicitudes:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Podrás depurar cualquier problema visualizando directamente las solicitudes y las respuestas de los servidores.

Si es posible, consulta las demás constantes de "FBSDKLoggingBehavior*" definidas en "FBSDKSettings.h" para ver otros elementos que puedes registrar.