gpt4 book ai didi

iOS Facebook SDK 4 session

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:49 24 4
gpt4 key购买 nike

我在使用适用于 iOS 的新 FacebookSDK 时遇到问题。

我可以成功登录并取回必要的信息,但是当我再次打开我的应用程序并打算跳过登录过程时,我正在验证的 session 为空。

这是我的 AppDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

self.window!.rootViewController = LogInViewController()
self.window!.makeKeyAndVisible()

FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
}

这是我的 Facebook 登录 View Controller :

class LogInViewController: UIViewController, FBSDKLoginButtonDelegate {
// MARK: Properties
@IBOutlet weak var logInView: FBSDKLoginButton!

// MARK: Init
init() { super.init(nibName: "LogInViewController", bundle: nil) }
required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }

// MARK: View Delegates
override func viewDidLoad() {
super.viewDidLoad()

if (FBSDKAccessToken.currentAccessToken() != nil) {
// User is already logged in, do work such as go to next view controller.
println(FBSDKAccessToken.currentAccessToken().tokenString)
self.goToNavigation()
} else {
logInView.readPermissions = ["public_profile", "email", "user_friends"]
logInView.delegate = self
}
}

// MARK: Facebook Delegate Methods
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
println("User Logged In")

if ((error) != nil) {
// Process error
} else if result.isCancelled {
// Handle cancellations
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email") {
// Do work
returnUserData()
}
}
}

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
println("User Logged Out")
}

func returnUserData() {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

if ((error) != nil) {
// Process error
println("Error: \(error)")
} else {
println("fetched user: \(result)")
let userName : NSString = result.valueForKey("name") as! NSString
println("User Name is: \(userName)")
let userEmail : NSString = result.valueForKey("email") as! NSString
println("User Email is: \(userEmail)")
}
self.goToNavigation()
})
}

func goToNavigation() {
// Creating a navigation controller with MainMenuViewController at the root of the navigation stack.
let navController = UINavigationController(rootViewController: MainMenuViewController())
self.presentViewController(navController, animated:true, completion: nil)
}
}

当我检查 if (FBSDKAccessToken.currentAccessToken() != nil) 时,尽管按钮标题是“注销”,但 session 总是为 null。

这可能是什么问题?欢迎提出任何建议!

最佳答案

自己的回答很好。有关更多信息,您可以使用自定义 Facebook 按钮,并且可以在登录过程实际获取访问 token 时调用获取数据请求。

使用自定义按钮和访问 token 登录。

在facebook sdk 4.x中获取用户信息

swift

@IBAction func btnFBLoginPressed(sender: AnyObject) {
var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager .logInWithReadPermissions(["email"], handler: { (result, error) -> Void in
if (error == nil){
var fbloginresult : FBSDKLoginManagerLoginResult = result
if(fbloginresult.grantedPermissions.containsObject("email"))
{
self.getFBUserData()
fbLoginManager.logOut()
}
}
})
}

func getFBUserData(){
if((FBSDKAccessToken.currentAccessToken()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
if (error == nil){
println(result)
}
})
}
}

输出:

{
email = "ashishkakkad8@gmail.com";
"first_name" = Ashish;
id = 910855688971343;
"last_name" = Kakkad;
name = "Ashish Kakkad";
picture = {
data = {
"is_silhouette" = 0;
url = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpf1/v/t1.0-1/p200x200/10394859_900936369963275_5557870055628103117_n.jpg?oh=fefbfca1272966fc78286c36741f9ac6&oe=55C89225&__gda__=1438608579_9133f15e55b594f6ac2306d61fa6b6b3";
};
};
}

objective-C

使用 Facebook SDK 4.x 登录

将以下代码添加到 facebook 登录按钮点击:

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
// Error
}
else if (result.isCancelled)
{
// Cancelled
}
else
{
if ([result.grantedPermissions containsObject:@"email"])
{
[self getFBResult];
}
}
}];

获取 Facebook 结果方法:

-(void)getFBResult
{
if ([FBSDKAccessToken currentAccessToken])
{
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, first_name, last_name, picture.type(large), email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error)
{
NSLog(@"fb user info : %@",result);
}
else
{
NSLog(@"error : %@",error);
}
}];
}
}

您可以根据需要更改权限字段。

关于iOS Facebook SDK 4 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com