Rawan
Rawan

Reputation: 1639

how to get posts from facebook page using GraphAPI in swift

My app had a functionality which is : get posts from Facebook page and show it in the app. i searched and i found that i should use Facebook GraphAPI : https://developers.facebook.com/docs/graph-api/using-graph-api/v2.3#reading i follow the previous link, but i get error : "An access token is required to request this resource." i have the access token for the page, but i really don't know how to assign it in my request. any help please? thanks a lot!

Upvotes: 2

Views: 4251

Answers (2)

Threadripper
Threadripper

Reputation: 652

Swift 4.2 Update Code

in your viewDidLoad() create faceBook Button for Login and Logout.

 let loginButton = FBLoginButton(permissions: [ .publicProfile, .email, .userPosts, .userPhotos])
    loginButton.center = view.center
    view.addSubview(loginButton)

Now Create Function to get FaceBook Posts

 func getPosts() {

    let accessToken = AccessToken.current?.tokenString
    let params = ["access_token" : accessToken ?? ""]

    let request = GraphRequest(graphPath: "/me/posts/", parameters: params, httpMethod: .get)

    request.start(completionHandler: { (test, result, error) in
        if(error == nil)
        {
           print(result!)
        }
    })

}

In result you will get Data of your facebook posts!

Upvotes: 0

Kirit Modi
Kirit Modi

Reputation: 23407

1. Using Facebook SDK.

LOGIN FACEBOOK BUTTON

@IBAction func click_Facebook(sender: AnyObject)
    {
        let loginView : FBSDKLoginManager = FBSDKLoginManager()

        loginView.loginBehavior = FBSDKLoginBehavior.Browser

        loginView.logInWithReadPermissions(["public_profile","user_friends","user_photos","user_location","user_education_history","user_birthday","user_posts"], handler: { (result : FBSDKLoginManagerLoginResult!, error : NSError!) -> Void in

                if ((error) != nil)
                {
                    // Process error

                    self.alertWithMessaage(error.localizedDescription)
                }
                else if result.isCancelled {
                    // Handle cancellations
                }
                else {

                    self.returnUserData()
                }

        })

    }

After login calling the below function.

    var Requset : FBSDKGraphRequest

    println("\(FBSDKAccessToken.currentAccessToken())")

    var acessToken = String(format:"%@", FBSDKAccessToken.currentAccessToken().tokenString) as String

    println("\(acessToken)")

    var parameters1 = ["access_token":FBSDKAccessToken.currentAccessToken().tokenString]


    Requset  = FBSDKGraphRequest(graphPath:"me/posts", parameters:parameters1, HTTPMethod:"GET")

    Requset.startWithCompletionHandler({ (connection, result, error) -> Void in

        MBProgressHUD.hideHUDForView(appDelegate.window, animated: true)

        if ((error) != nil)
        {
            println("Error: \(error)")
        }
        else
        {
            println("fetched user: \(result)")

            var dataDict: AnyObject = result!.objectForKey("data")!

        }
    })
}

2. Using Default Facebook App.

// Get Access TOKEN

    var _accountStore: ACAccountStore = ACAccountStore()

    var accountType : ACAccountType = _accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierFacebook)!

    var accounts : NSArray = _accountStore.accountsWithAccountType(accountType)!

    var facebookAccount1: ACAccount = accounts.lastObject! as ACAccount

    println("== \(facebookAccount1.credential.oauthToken)")

// Pass AccessToken To Parameter

    var acessToken = String(format:"%@", facebookAccount1.credential.oauthToken) as String

    var parameters = ["access_token":acessToken] as NSDictionary

//SLRequset

    var imageURL : NSURL = NSURL(string: "Your graph URL")!

    println("=== TOKEN : \(LoginService().currentAccount?.credential.oauthToken)")

    var Requset = SLRequest(forServiceType: SLServiceTypeFacebook, requestMethod: SLRequestMethod.GET, URL: imageURL, parameters: parameters)

    Requset.account = account

    Requset.performRequestWithHandler { (responseData : NSData!, urlResponse : NSHTTPURLResponse!, error : NSError!) -> Void in


        if (error != nil)
        {
            self.alertWithMessaage(error.localizedDescription)
        }
        else{

            var datastring = NSString(data: responseData, encoding: NSUTF8StringEncoding)

            println("== \(datastring)")

            var error:NSError? = nil

            var UserDict = NSJSONSerialization.JSONObjectWithData(responseData, options:nil, error: &error) as? NSDictionary


        }

    }

Upvotes: 4

Related Questions