Usar la API Graph: iOS

Utiliza la API Graph para introducir y extraer datos de la gráfica social de Facebook.

Esto incluye:

  • Obtener información del perfil para proporcionar contexto social.
  • Obtener información del usuario, como sus Me gusta o fotos.
  • Realizar publicaciones (incluidos vídeos o fotos) en Facebook.
  • Publicar historias de Open Graph en Facebook.
  • Consulta más funciones en la documentación de la API Graph.

En esta guía se describe el uso de la API Graph con el SDK de Facebook para iOS.

Requisitos previos

Para llamar a la API Graph, es necesario que un usuario inicie sesión en la aplicación mediante Facebook y autorice los permisos para la aplicación.

Por ejemplo, si quieres obtener la dirección de correo electrónico de un usuario, la aplicación debe tener autorización para el permiso email. Asegúrate de conocer las siguientes prácticas:

También necesitas la configuración del entorno de desarrollo del SDK para iOS y la configuración de la aplicación; consulta iOS, Guía de introducción.

Obtener datos de usuarios

El SDK tiene dos clases para usar la API Graph (FBSDKGraphRequest y FBSDKGraphRequestConnection), que son similares a las clases NSURLRequest y NSURLRequestConnection del marco Foundation.

Para utilizar la clase FBSDKGraphRequest, proporciona la solicitud con un extremo específico de la API Graph. A continuación, llama a FBSDKGraphRequestConnection para iniciar la solicitud y procesar su finalización.

Para que resulte más cómodo, el SDK tiene un método startWithCompletionHandler: en FBSDKGraphRequest para crear implícitamente una clase FBSDKGraphRequestConnection para ti.

Por ejemplo, para obtener la información del perfil de la persona que tiene la sesión iniciada en la aplicación, realiza esta llamada:

guard AccessToken.current != nil else { return }

let request = GraphRequest(graphPath: "me", parameters: [:])
request.start() { connection, result, error in
    if let result = result, error == nil {
        print("fetched user: \(result)")
    }
}

Solicitudes por lotes

En la API Graph, puedes realizar solicitudes por lotes en una sola solicitud HTTP; consulta API Graph: Solicitudes por lotes.

Con el SDK, puedes crear varias solicitudes y añadirlas a la misma instancia de FBSDKGraphRequestConnection . Debes utilizar las solicitudes por lotes siempre que sea posible para minimizar el tráfico de red.

Por ejemplo, a continuación solicitamos los Me gusta de un usuario:

guard let token = AccessToken.current else { return }

if token.hasGranted("user_likes") {
    let meRequest = GraphRequest(graphPath: "me", parameters: [:])
    let likesRequest = GraphRequest(graphPath: "me/likes", parameters: [:])

    let connection = GraphRequestConnection()
    connection.add(meRequest) { connection, result, error in
        // Process the 'me' information
    }
    connection.add(likesRequest) { connection, result, error in
        // Process the 'likes' information
    }

    connection.start()
}

También puedes especificar parámetros por lotes con las sobrecargas addRequest:completionHandler:, que incluyen la capacidad de crear un lote con solicitudes dependientes.

Compartir fotos y vídeos

Aunque siempre puedes crear manualmente FBSDKGraphRequests para usar los extremos de la API Graph, el SDK de Facebook para iOS simplifica el uso compartido de fotos y vídeos con FBSDKShareKit.framework. Por ejemplo, para compartir una foto:

let image: UIImage!
let content = SharePhotoContent()
content.photos = SharePhoto(image: image, isUserGenerated: true)

// Assuming self implements SharingDelegate
let dialog = ShareDialog(
    viewController: self,
    content: content,
    delegate: self
)
dialog.show()

También puedes compartir vídeos con el tipo FBSDKShareVideoContent. Consulta Compartir en iOS.

Eliminar objetos

También puedes eliminar objetos que tu aplicación haya creado mediante el envío de una solicitud DELETE con el identificador del objeto como ruta del gráfico.

Por ejemplo, imagina que has publicado una foto en una página y has recibido el identificador “1234”. El siguiente código eliminaría la foto:

guard let token = AccessToken.current else { return }

if token.hasGranted("pages_manage_posts") {
    let request = GraphRequest(graphPath: "1234", parameters: [:], httpMethod: .delete)
    request.start { connection, result, error in
        if error == nil {
            print("Deleted photo")
        }
    }
}

Sugerencias de depuración

Puedes experimentar y hacer pruebas con tus solicitudes mediante el Explorador de la API Graph.

También puedes activar el modo de depuración de la API Graph; consulta Solución de problemas del SDK para iOS: Cómo depuro las solicitudes de la API Graph.