Использование API Graph для iOS

Получайте и отправляйте данные социального графа Facebook с помощью API Graph.

Вы сможете:

  • получать информацию из профилей для выявления социального контекста;
  • получать информацию о пользователе, например его отметки "Нравится" и фото;
  • размещать публикации (в том числе фото и видео) на Facebook;
  • публиковать истории Open Graph на Facebook;
  • информацию о других функциях см. в документации по API Graph.

В этом руководстве рассказывается, как работать с API Graph с помощью Facebook SDK для iOS.

Предварительные требования

Для вызова API Graph кто-то должен войти в ваше приложение через Facebook и дать разрешения для вашего приложения.

Например, если вам нужно получить чей-то адрес электронной почты, у приложения должно быть разрешение email . Обязательно ознакомьтесь со следующими статьями:

Кроме того, необходимо настроить среду разработки и приложение для работы с SDK для iOS. См. руководство по началу работы с iOS.

Доступ к данным пользователя

В SDK есть два класса для работы с API Graph: FBSDKGraphRequest и FBSDKGraphRequestConnection . Они сходны с классами NSURLRequest и NSURLRequestConnection во фреймворке Foundation.

Чтобы использовать класс FBSDKGraphRequest , добавьте в запрос специальную конечную точку API Graph. Затем вызовите класс FBSDKGraphRequestConnection , чтобы начать запрос и обработать его завершение.

Для удобства в SDK существует метод startWithCompletionHandler: в классе FBSDKGraphRequest , который неявным образом создает FBSDKGraphRequestConnection .

Например, отправьте следующий вызов, чтобы получить информацию из профиля человека, который вошел в приложение:

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)")
    }
}

Пакетные запросы

В одном HTTP-запросе API Graph можно отправлять пакетные запросы. См. раздел API Graph: создание пакетных запросов.

SDK позволяет создать несколько запросов и добавить их в один и тот же экземпляр FBSDKGraphRequestConnection . Старайтесь по возможности объединять запросы в пакеты, чтобы сократить сетевой трафик.

Например, запросить данные об отметках "Нравится" можно так:

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()
}

Также можно указать параметры пакета с помощью перегрузки addRequest:completionHandler: . Это позволит создать пакет с зависимыми запросами.

Публикация фото и видео

Вы всегда можете вручную создать объект FBSDKGraphRequests для работы с конечными точками API Graph. Но удобнее будет сделать это с помощью Facebook SDK для iOS, который позволяет публиковать фото и видео посредством FBSDKShareKit.framework. Например, чтобы поделиться фото, отправьте следующий запрос:

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()

Также можно публиковать видео, используя тип FBSDKShareVideoContent . См. статью Публикация материалов в iOS.

Удаление объектов

Чтобы удалить объекты, созданные вашим приложением, отправьте запрос DELETE и укажите ID объекта в качестве пути в графе.

Например, вы опубликовали фото на Странице и получили ID публикации 1234. Чтобы удалить фото, используйте следующий код:

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")
        }
    }
}

Советы по отладке

Чтобы поэкспериментировать с запросами и протестировать их, воспользуйтесь Graph API Explorer.

Кроме того, можно включить режим отладки в API Graph. См. раздел Устранение неполадок в SDK для iOS: режим отладки API Graph.