尝试与 Swift 结交共同好友 Facebook 时为零
Nil while trying to get mutual friends Facebook with Swift
我正在尝试获取共同好友的数量,但无济于事:
func verifyUser(slot: Int) {
let userManager = self.userManager
var currentUserSlot = userManager.currentUserSlot
userManager.switchToNoActiveUser()
var behavior: FBSessionLoginBehavior = (slot == 0) ? FBSessionLoginBehavior.WithFallbackToWebView : FBSessionLoginBehavior.ForcingWebView
var session: FBSession = userManager.switchToUserInSlot(slot)
session.openWithBehavior(behavior, completionHandler:{(innerSession: FBSession!, status: FBSessionState, error: NSError?) -> Void in
if (error != nil) {
println("Could not open session")
userManager.switchToNoActiveUser()
} else {
println("Succes")
println("Is session open: \(session.isOpen)")
var params: Dictionary<String, AnyObject> = Dictionary()
params["fields"] = "context.fields(mutual_friends)"
FBRequestConnection.startWithGraphPath("me", parameters: params, HTTPMethod: "GET", completionHandler: {(connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("MUTUAL: \(result)")
})
self.updateSession(slot)
}
})
}
我是运行这个代码:
FBRequestConnection.startWithGraphPath("me", parameters: params, HTTPMethod: "GET", completionHandler: {(connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("MUTUAL: \(result)")
})
会话成功打开后。但我不断收到此错误:FBSDKLog:请求端点错误 'me':必须为调用此端点指定打开的 FBSession。
相互:无
我只是不明白为什么,因为我刚刚成功打开了一个会话,所以我这里做错了什么?
谢谢!
多亏了@Sam,我才得以完成工作,但是我该如何以更优雅的方式获得共同朋友的数量:
var mutualFriends: AnyObject? = (result.objectForKey("context") == nil) ? nil : result.objectForKey("context")
var mutualfriends2: AnyObject? = mutualFriends?.objectForKey("mutual_friends")
var mutualfriends3: AnyObject? = mutualfriends2?.objectForKey("summary")
var numberOfMutualFriends: Int? = mutualfriends3?.objectForKey("total_count") as? Int
println("MUTUAL: \(numberOfMutualFriends)")
谢谢!
问题可能是 startWithGraphPath
函数默认使用 FBSession.activeSession()
。您正在打开一个会话,但没有为请求使用新打开的会话。
尝试在调用 startWithGraphPath
之前添加此内容:
FBSession.setActiveSession(innerSession)
或者,如果您不想将其设置为活动会话,则可以调用 initWithSession:graphPath:parameters:HTTPMethod:
和 innerSession
。有关该功能的更多信息,请参阅 the documentation。
我正在尝试获取共同好友的数量,但无济于事:
func verifyUser(slot: Int) {
let userManager = self.userManager
var currentUserSlot = userManager.currentUserSlot
userManager.switchToNoActiveUser()
var behavior: FBSessionLoginBehavior = (slot == 0) ? FBSessionLoginBehavior.WithFallbackToWebView : FBSessionLoginBehavior.ForcingWebView
var session: FBSession = userManager.switchToUserInSlot(slot)
session.openWithBehavior(behavior, completionHandler:{(innerSession: FBSession!, status: FBSessionState, error: NSError?) -> Void in
if (error != nil) {
println("Could not open session")
userManager.switchToNoActiveUser()
} else {
println("Succes")
println("Is session open: \(session.isOpen)")
var params: Dictionary<String, AnyObject> = Dictionary()
params["fields"] = "context.fields(mutual_friends)"
FBRequestConnection.startWithGraphPath("me", parameters: params, HTTPMethod: "GET", completionHandler: {(connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("MUTUAL: \(result)")
})
self.updateSession(slot)
}
})
}
我是运行这个代码:
FBRequestConnection.startWithGraphPath("me", parameters: params, HTTPMethod: "GET", completionHandler: {(connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("MUTUAL: \(result)")
})
会话成功打开后。但我不断收到此错误:FBSDKLog:请求端点错误 'me':必须为调用此端点指定打开的 FBSession。 相互:无
我只是不明白为什么,因为我刚刚成功打开了一个会话,所以我这里做错了什么?
谢谢!
多亏了@Sam,我才得以完成工作,但是我该如何以更优雅的方式获得共同朋友的数量:
var mutualFriends: AnyObject? = (result.objectForKey("context") == nil) ? nil : result.objectForKey("context")
var mutualfriends2: AnyObject? = mutualFriends?.objectForKey("mutual_friends")
var mutualfriends3: AnyObject? = mutualfriends2?.objectForKey("summary")
var numberOfMutualFriends: Int? = mutualfriends3?.objectForKey("total_count") as? Int
println("MUTUAL: \(numberOfMutualFriends)")
谢谢!
问题可能是 startWithGraphPath
函数默认使用 FBSession.activeSession()
。您正在打开一个会话,但没有为请求使用新打开的会话。
尝试在调用 startWithGraphPath
之前添加此内容:
FBSession.setActiveSession(innerSession)
或者,如果您不想将其设置为活动会话,则可以调用 initWithSession:graphPath:parameters:HTTPMethod:
和 innerSession
。有关该功能的更多信息,请参阅 the documentation。