【问题标题】:How to get FBSDKAccessToken in IOS Swift如何在 IOS Swift 中获取 FBSDKAccessToken
【发布时间】:2016-09-15 09:18:35
【问题描述】:

我在 IOS9 中快速使用 Facebook SDK,但没有获得 aceestoken。我已经在 viewcontroller.swift 文件中编写了登录代码。我已经完成了所有设置都在我的 info.plist 文件中,但总是在 accesstoken 中获得 nil 值。

这是我的代码

AppDelegate.swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?
  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    FBSDKLoginButton.classForCoder()
    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)
   }
}

ViewController.swift

class ViewController: UIViewController,FBSDKLoginButtonDelegate {


 override func viewDidLoad() {
          super.viewDidLoad()
           //outlet for fbsdkloginbutton
            @IBOutlet weak var facebookLoginButton: FBSDKLoginButton!
         var error:NSError?

                //check for error
                 if error != nil{
                                    print(error)
                                    return
                                }
                    //Check for the access token
                                if (FBSDKAccessToken.currentAccessToken() == nil){
                                    print("USER NOT LOGGED IN")
                                }else{
                                    print("USER LOGGED IN")
                                }
                //set delegate for button
                        self.facebookLoginButton.delegate = self
                                //read permission
                                facebookLoginButton.readPermissions = ["public_profile","user_friends","email"]
                             }
                        func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
                                /*
                                 Check for successful login and act accordingly.
                                 Perform your segue to another UIViewController here.
                                 */
                         if (error != nil){
                                    print(error.localizedDescription)
                                }

                                if let userToken = result.token{
                                    // GET USER TOKEN HERE
                                    let token:FBSDKAccessToken = userToken
                                    print(token)
                                    //print token id and user id
                                    print("TOKEN IS \(FBSDKAccessToken.currentAccessToken().tokenString)")
                                    print("USER ID IS \(FBSDKAccessToken.currentAccessToken().userID)")

                                }

                            }
                            func applicationWillTerminate(application: UIApplication)
                            {
                                // Called when the application is about to terminate.      Save data if 
                            }


                            func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
                                // Actions for when the user logged out goes here
                            }

                        }

【问题讨论】:

  • 您是如何尝试获取访问令牌的?

标签: ios swift facebook-graph-api facebook-ios-sdk


【解决方案1】:

您需要在 ViewController 中实现委托功能。这个site 很有帮助。 HTH。

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
    if ((error) != nil) {
        // Process error
    } else if result.isCancelled {
        // Handle cancellations
    } else {
        let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "id, email, name"])
        graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
            if ((error) != nil) {
                print("Error: \(error)")
            } else {
                // Do work in app.
                let token = FBSDKAccessToken.currentAccessToken().tokenString
                let loginProvider = CustomIdentityProvider(tokens: ["graph.facebook.com": token!])
                if let user : NSString = result!.valueForKey("name") as? NSString {
                    print("user: \(user)")
                }
                if let id : NSString = result!.valueForKey("id") as? NSString {
                    print("id: \(id)")
                }
                if let email : NSString = result!.value(forKey: "email") as? NSString {
                    print("email: \(email)")
                }
            }
        })
    }
}

【讨论】:

    【解决方案2】:
    FBSDKAccessToken.currentAccessToken()
    

    如果没有访问令牌则返回 nil

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      相关资源
      最近更新 更多