Ios 如何使用swift中的GraphAPI从facebook页面获取帖子
我的应用程序有一个功能:从Facebook页面获取帖子并在应用程序中显示。 我搜索发现我应该使用Facebook GraphAPI: 我遵循上一个链接,但出现错误: “请求此资源需要访问令牌。” 我有页面的访问令牌,但我真的不知道如何在请求中分配它。 需要帮忙吗?Ios 如何使用swift中的GraphAPI从facebook页面获取帖子,ios,swift,facebook-graph-api,Ios,Swift,Facebook Graph Api,我的应用程序有一个功能:从Facebook页面获取帖子并在应用程序中显示。 我搜索发现我应该使用Facebook GraphAPI: 我遵循上一个链接,但出现错误: “请求此资源需要访问令牌。” 我有页面的访问令牌,但我真的不知道如何在请求中分配它。 需要帮忙吗? 非常感谢 1。使用Facebook SDK。 登录FACEBOOK按钮 @IBAction func click_Facebook(sender: AnyObject) { let loginView : FB
非常感谢 1。使用Facebook SDK。 登录FACEBOOK按钮
@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()
}
})
}
登录后调用下面的函数
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。使用默认的Facebook应用程序。
//获取访问令牌
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)")
//将AccessToken传递给参数
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
}
}
Swift 4.2更新代码
在您的viewDidLoad()中
创建用于登录和注销的faceBook按钮
let loginButton = FBLoginButton(permissions: [ .publicProfile, .email, .userPosts, .userPhotos])
loginButton.center = view.center
view.addSubview(loginButton)
现在创建获取FaceBook帖子的函数
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!)
}
})
}
结果你会得到你的facebook帖子的数据 将访问令牌作为参数传递。嘿,非常感谢您的回答,但我在获取访问令牌时遇到了一个问题,您能解释一下如何获取它吗?我从中获得它,但过了一段时间,这个访问令牌不起作用,错误是:(它的到期时间已过),因此我必须续订它。你能告诉我你是怎么得到它的吗?在Iphone中用Facebook登录你的设置。如果用户没有从设置登录,会发生什么?还有一个问题:我应用了您的代码,但在运行时,我在“facebookAccount1”中遇到了一个异常。错误是:在展开可选值时意外发现nil为什么?使用FacebookSDK 4.1的最佳方法。我正在更新如何在使用Facebook Sdk时获取AccessToken