Usar la API Graph en iOS

Usa la API Graph para importar y exportar datos de la gráfica social de Facebook.

Esto incluye lo siguiente:

  • Obtener información del perfil para proporcionar contexto social.
  • Obtener información del usuario, como las publicaciones que le gustan o sus fotos.
  • Hacer publicaciones (incluso de fotos o videos) en Facebook.
  • Publicar historias de Open Graph en Facebook.
  • Para conocer otras funciones, consulta la documentación de la API Graph.

En esta guía, se describe cómo trabajar con la API Graph cuando se usa el SDK de Facebook para iOS.

Requisitos previos

Para realizar una llamada a la API Graph, es necesario que alguien inicie sesión en tu app a través de Facebook y conceda permisos a tu app.

Por ejemplo, si deseas obtener la dirección de correo electrónico de una persona, tu app debe contar con el permiso email . Procura familiarizarte con los siguientes temas:

También debes configurar tu entorno de desarrollo y tu app para el SDK para iOS. Consulta la guía de primeros pasos para iOS.

Recuperación de datos de usuario

El SDK tiene dos clases para trabajar con la API Graph: FBSDKGraphRequest y FBSDKGraphRequestConnection , que son similares a NSURLRequest y NSURLRequestConnection del marco Foundation.

Para usar FBSDKGraphRequest , proporciona a la solicitud un punto de conexión específico de la API Graph. Luego, haz una llamada a FBSDKGraphRequestConnection para iniciar la solicitud y procesar su finalización.

Para tu comodidad, el SDK tiene un método startWithCompletionHandler: en FBSDKGraphRequest para crear una conexión FBSDKGraphRequestConnection implícitamente por ti.

Por ejemplo, para obtener la información del perfil de la persona que tiene una sesión iniciada actualmente en tu app, haz 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 hacer solicitudes por lotes en una única solicitud HTTP. Consulta API Graph, Hacer solicitudes por lotes.

Con el SDK, puedes crear varias solicitudes y agregarlas a la misma instancia de FBSDKGraphRequestConnection . Siempre que sea posible, agrupa las solicitudes por lotes para minimizar el tráfico de red.

Por ejemplo, aquí se solicitan los Me gusta de una persona:

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 de lotes con las sobrecargas del addRequest:completionHandler: , que incluyen la capacidad de crear un lote con solicitudes dependientes.

Compartir fotos y videos

Si bien siempre puedes crear manualmente FBSDKGraphRequests para trabajar con los extremos de la API Graph, el SDK de Facebook para iOS simplifica la función de compartir fotos y videos 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 videos usando el tipo FBSDKShareVideoContent . Consulta Compartir en iOS.

Eliminar objetos

Puedes eliminar objetos creados por tu app. Para hacerlo, envía una solicitud DELETE con el identificador del objeto como ruta del gráfico.

Por ejemplo, supón que publicaste una foto en una página y recibiste 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")
        }
    }
}

Consejos para depurar errores

Puedes someter a experimentación y prueba tus solicitudes con 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, Modo de depuración de la API Graph.