2016-07-29 4 views
0

Я разрабатываю приложение в iOS для входа в Facebook. Я могу войти в систему с помощью Facebook, но я не смог получить токен доступа.Как получить токен доступа в facebook ios

Это мой метод делегата:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 
    print("at delegate") 
    var configureError: NSError? 
    GGLContext.sharedInstance().configureWithError(&configureError) 
    assert(configureError == nil, "Error configuring Google services: \(configureError)") 
    GIDSignIn.sharedInstance().delegate = self 
    FBSDKLoginButton.classForCoder() 

     return FBSDKApplicationDelegate.sharedInstance().application(application, 

                     didFinishLaunchingWithOptions:launchOptions) 
} 
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 
    print("at delegatehg") 
      return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) || GIDSignIn.sharedInstance().handleURL(url,sourceApplication: sourceApplication, 
                                                   annotation: annotation) 
} 

И с моей ViewController, у меня есть кнопка в раскадровку для входа в Facebook. Это мое содержимое внутри кнопки:

@IBAction func fbLogin(sender: FBSDKLoginButton) {  

     if (FBSDKAccessToken.currentAccessToken() != nil){ 
      print("token is not nil") 
      let Level2 = self.storyboard!.instantiateViewControllerWithIdentifier("facebook") as? UIViewController 
      self.presentViewController(Level2!, animated: true, completion: nil) 
     } else{ 
     var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
     fbLoginManager.logInWithReadPermissions(["public_profile", "email", "user_friends"], handler: { (result, error) -> Void in 

      if (error == nil){ 
       var fbloginresult : FBSDKLoginManagerLoginResult = result 
       if(fbloginresult.grantedPermissions.contains("email")) 
       { 
        self.getFBUserData() 
        fbLoginManager.logOut() 

       } 
      } 
     }) 
    } 
    } 
    func getFBUserData(){ 
     FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"name,email,picture.type(large),gender"]).startWithCompletionHandler { (connection, result, error) -> Void in 

      let strName: String = (result.objectForKey("name") as? String)! 
         print(result) 
      let Gender : String = (result.objectForKey("gender") as? String)! 
      let Id = (result.objectForKey("id") as? String)! 
      let deviceId = UIDevice.currentDevice().identifierForVendor?.UUIDString 
      let UUID = NSUUID().UUIDString 
      print(UUID) 
      var DeviceId = deviceId 
      print(DeviceId) 
      print(Id) 
      print(Gender) 
      print(strName) 
      var strEmail : String 
      if ((result.objectForKey("email") as? String) != nil){ 
       strEmail = (result.objectForKey("email") as? String)! 
      }else { 
       strEmail = "not available" 
      } 
      //let strEmail: String = (result.objectForKey("email") as? String)! 

      var userID = result["id"] as! NSString 
      var facebookProfileUrl = "http://graph.facebook.com/\(userID)/picture?type=large" 
      print(strEmail) 

      print(strEmail) 
      let request = NSMutableURLRequest(URL: NSURL(string: "http://projects.svirtzone.com/wified/api/authentication.php")!) 
      request.HTTPMethod = "POST" 
      let postString = "username=\(strName)&email=\(strEmail)&action=auth&pic=\(facebookProfileUrl)&dob=1989/05/05&logintype=Facebook&gender=\(Gender)&device_type=Mac&facebookid=\(Id)&agerange=15&deviceid=\(deviceId)&accesstoken=fdfsfs" 
      request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
      let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
       guard error == nil && data != nil else {               // check for fundamental networking error 
        print("error=\(error)") 
        return 
       } 
       if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {   // check for http errors 
        print("statusCode should be 200, but is \(httpStatus.statusCode)") 
        print("response = \(response)") 
       } 

       let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
       print("responseString = \(responseString)") 
      } 
      task.resume() 
      let Level2 = self.storyboard!.instantiateViewControllerWithIdentifier("facebook") as? UIViewController 
      self.presentViewController(Level2!, animated: true, completion: nil) 

      if (error == nil){ 
       print(result) 
      } 
     } 

Одна вещь, которую я заметил, что когда я, войдя в Facebook, он не вызывает application() method в AppDelegate. Он также не добавил строку внутри моего кода loginView.delegate = self. Это может быть причиной моей проблемы, и я не знаю, как добавить эту строку в соответствии с моим кодом.

Когда я пытаюсь получить маркер доступа по этой линии:

var token = FBSDKAccessToken.currentAccessToken().tokenString 
print(token) 

Я получаю эту ошибку:

Fatal error: unexpectedly found nil while unwrapping an Optional value

Может кто-нибудь мне помочь, пожалуйста?

ответ

0

Вы можете использовать метод делегата:

- (void)fbDialogLogin: 
(NSString *) 
token expirationDate:(NSDate *) 
expirationDate 
+0

для получения дополнительной информации вы можете обратиться к следующему вопросу: Facebook Токен доступа –

+0

вы можете сказать мне ясно, пожалуйста, @ Bandna Prasher –

+0

Как ... fbdialoglogin –

Смежные вопросы