2016-03-11 2 views
0

Я пытаюсь внедрить вход в Facebook с помощью своего приложения Swift. Я смог войти в приложение просто отлично. Тем не менее, я столкнулся с проблемой, когда я зарегистрировал пользователя. Я получаю ошибку the supplied Facebook session token is expired or invalid. Как я могу создать новый токен? Вот код:Идентификатор поставленного токена Facebook истек или недействителен

 if let accessToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken() { 
     PFFacebookUtils.logInInBackgroundWithAccessToken(accessToken, block: { 
      (user: PFUser?, error: NSError?) -> Void in 
      if user != nil { 
       print("User logged in through Facebook!") 

       self.navigateToInGame(true) 

      } else { 
       print("Uh oh. There was an error logging in.") 

       let manager = FBSDKLoginManager() 
       manager.logOut() 
       manager.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { (result, error) -> Void in 
        if let error = error { 
         print(error.localizedDescription) 
        } 

        if result.isCancelled { 
         print("Cancelled") 
        } else { 
         print("Logged in") 
         if let user = user { 
          if user.isNew { 
           print("User signed up and logged in through Facebook!") 

           self.performSegueWithIdentifier("signUp", sender: self) 

          } else { 
           print("User logged in through Facebook!") 

           self.navigateToInGame(true) 
          } 
         } else { 
          print("Uh oh. The user cancelled the Facebook login.") 
         } 

        } 
       }) 

       if accessToken.expirationDate.compare(NSDate()) == NSComparisonResult.OrderedAscending { 
        FBSDKLoginManager.renewSystemCredentials({ (result, error) -> Void in 
         if result != .Renewed { 
          // Do further procedures once renewed is failed or rejected 
          print("Token didn't renew") 
         } 
        }) 
       } 

      } 
     }) 
    } else { 
     let permissions = ["public_profile", "email"] 
     PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, block: { 
      (user: PFUser?, error: NSError?) -> Void in 
      if let user = user { 
       if user.isNew { 
        print("User signed up and logged in through Facebook!") 

        self.performSegueWithIdentifier("signUp", sender: self) 

       } else { 
        print("User logged in through Facebook!") 

        self.navigateToInGame(true) 
       } 
      } else { 
       print("Uh oh. The user cancelled the Facebook login.") 
      } 
     }) 
    } 
} 

ОБНОВЛЕНО КОД.

я получаю следующее в журнале:

«Ой-ой, ошибка при входе в». Позволяет мне войти в систему через FB. Я нажимаю «Продолжить» в Facebook.

Log чтений «вошел в»

Log читает «Ой-ой, пользователь отменил логин Facebook и пинает меня обратно на экран входа в системе. Пользователь, однако, по-прежнему создается в синтаксическом анализе. Я хотел бы перейти к моему SIGNUP Segue после подписания в первый раз.

ответ

1
if result.isCancelled { 
    print("Cancelled") 
} else { 
    result.token // Your new token is here and throw the token into logInInBackgroundWithAccessToken(:) again 
} 
//else { 
// print("Logged in") 
// if let user = user { 
//  if user.isNew { 
//   print("User signed up and logged in through Facebook!") 
//    
//   self.performSegueWithIdentifier("signUp", sender: self) 
//    
//  } else { 
//   print("User logged in through Facebook!") 
//    
//   self.navigateToInGame(true) 
//  } 
// } else { 
//  print("Uh oh. The user cancelled the Facebook login.") 
// } 
//  
//} 

Та часть if let user = user { ... } не имеет смысла для меня, потому что новый маркер result.token только что получил от func logInWithReadPermissions. Таким образом, обновленный маркер должен положить через PFFacebookUtils.logInInBackgroundWithAccessToken(:) снова

+0

Спасибо за ответ! Я помещаю этот код прямо там, где ошибка регистрируется, но не получает переданный оператор if. Вы знаете, как быстро преобразовать этот ответ? http://stackoverflow.com/questions/29421659/reset-facebook-token-reference-facebook-sdk-4-0. Я думаю, что это может быть ответ. Мне нужно выйти из системы и сбросить токен – winston

+0

@james Я только что обновил свой ответ. Пожалуйста, возьмите его для справки. Ура! – Allen

+0

Большое вам спасибо за это. Я надеюсь, что это работает, потому что пользователь действительно не «вышел из системы» (я удалил пользователя из таблицы User для тестирования, а затем удалил приложение в FB). Я дам вам знать, если это сработает! – winston

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