Use the Graph API to get data in and out of Facebook's social graph .
This includes:
This guide describes how you work with the Graph API using the Facebook SDK for iOS.
Calling the Graph API requires someone to login to your app via Facebook and authorize permissions for your app.
For example, if you want to fetch someone's email address, your app must be authorized for the email
permission. Be sure you are familiar with:
You also need your development environment set up for the iOS SDK and your app set up, see iOS, Getting Started Guide .
The SDK has two classes to work with the Graph API: FBSDKGraphRequest
and FBSDKGraphRequestConnection
which are similar to the Foundation framework's NSURLRequest
and NSURLRequestConnection
.
To use the FBSDKGraphRequest
you provide the request with a specific Graph API endpoint. Then call FBSDKGraphRequestConnection
to start the request and process its completion.
For convenience, the SDK has a startWithCompletionHandler:
method on FBSDKGraphRequest
to implicitly create a FBSDKGraphRequestConnection
for you.
For example to fetch the profile information for the person currently logged into your app, make this call:
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)") } }
In Graph API you can make batch requests in a single HTTP request, see Graph API, Making Batch Requests .
With the SDK, you can construct multiple requests and add them to the same FBSDKGraphRequestConnection
instance. You should batch requests whenever possible to minimize network traffic.
For example here we request someone's Likes:
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() }
You can also specify batch parameters with the addRequest:completionHandler:
overloads, which includes the ability to create a batch with dependent requests.
While you can always manually create FBSDKGraphRequests
to work with the Graph API endpoints, the Facebook SDK for iOS simplifies sharing photos and videos with FBSDKShareKit.framework
. For example, to share a photo:
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()
You can also share videos using the FBSDKShareVideoContent
type. See the Sharing on iOS
.
You can also delete objects that your app created by sending a DELETE
request with the object's ID as the graph path.
For example, imagine you published a photo to a Page and received an ID of “1234”. The following code would delete the photo:
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") } } }
You can experiment and test your requests with the Graph API Explorer .
You can also enable Graph API debug mode, see iOS SDK Troubleshooting, Graph API Debug Mode .