iOSでFacebookのログインを実装するのにかなりの問題があります。ユーザーがまだログインしていないとすべて正常に動作します。アプリケーションはFacebookから正しくデータを取り出し、ユーザーがFacebookのログイン時にViewControllerを変更する
override func viewDidLoad() {
super.viewDidLoad()
LoginButton.delegate = self
if (FBSDKAccessToken.currentAccessToken() != nil) {
self.performSegueWithIdentifier("Login", sender: self)
}
}
が、コンソールI IN:すでにログインしている場合は、代わりに次のViewControllerは、自動的にユーザーの情報を示しますが、私はそれを実現することはできませんが、現在、私はこの方法を使用してい要約ページにセグエ必要があります取得:
Facebook_Login.LoginViewController:0x7fc04a519ca0 on Facebook_Login.ViewController:0x7fc04a41c1e0そのビューはウィンドウの階層にはありません!
ビューコントローラ1
:「完全なコードを私はまたviewdidAppearメソッドを使用して試してみたが、私はここに空のページにを得るように、変数を更新せずに要約ページにsegues
インポートのUIKit インポートFBSDKLoginKit
クラスのViewController:のUIViewController、FBSDKLoginButtonDelegate {
var nome1:String = ""
var cognome1:String = ""
var email1:String = ""
var compleanno:String = ""
var città:String = ""
var genere:String = ""
var immagine_url:String = ""
@IBOutlet weak var LoginButton: FBSDKLoginButton!
@IBAction func LoginAction(sender: AnyObject) {
LoginButton.delegate = self
LoginButton.readPermissions = ["email"]
}
func FetchInfo(){
print("scarico le informazioni...")
let parametri = ["fields":"email, first_name, last_name, birthday, hometown, gender, picture.type(large)"]
FBSDKGraphRequest(graphPath: "me", parameters: parametri).startWithCompletionHandler{(connection,result,error) -> Void in
if (error != nil){
print ("errore")
return
}
else {
if let email = result["email"] as? String {
print(email)
self.email1 = email
}
if let nome = result["first_name"] as? String {
print(nome)
self.nome1 = nome
}
if let cognome = result["last_name"] as? String {
print(cognome)
self.cognome1 = cognome
}
if let compleanno = result["birthday"] as? String{
print(compleanno)
}
if let città = result["hometown"] as? String{
print(città)
}
if var genere = result["gender"] as? String{
if (genere == "male"){
genere = "maschio"
}
else {
genere = "femmina"
}
print(genere)
}
}
if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String{
self.immagine_url = url
print(self.immagine_url)
}
}
return
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!){
if (result.isCancelled == true){
print("cancellato")
}
else {
print("login effettuato")
FetchInfo()
self.performSegueWithIdentifier("Login", sender: self)
}
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!){
}
func loginButtonWillLogin(loginButton: FBSDKLoginButton!) -> Bool{
return true
}
@IBAction func returned(segue:UIStoryboardSegue){
}
override func viewDidLoad() {
super.viewDidLoad()
LoginButton.delegate = self
}
override func viewDidAppear(animated: Bool) {
if (FBSDKAccessToken.currentAccessToken() != nil) {
FetchInfo()
if(nome1 == ""){
}
else {
self.performSegueWithIdentifier("Login", sender: self)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destinazione:LoginViewController = segue.destinationViewController
as! LoginViewController
destinazione.temp_nome = nome1
destinazione.temp_cognome = cognome1
destinazione.temp_email = email1
destinazione.img_profile_url = immagine_url
}
}
のViewController 2:
輸入のUIKit 輸入FBSDKLoginKit
クラスLoginViewController:のUIViewController、すべてのFBSDKLoginButtonDelegate {
var temp_nome = ""
var temp_cognome = ""
var temp_email = ""
var img_profile_url:String = ""
@IBOutlet weak var Nome_Utente: UILabel!
@IBOutlet weak var email: UILabel!
@IBOutlet weak var Immagine_Utente: UIImageView!
@IBOutlet weak var Login_button: FBSDKLoginButton!
@IBAction func Login_button_Action(sender: AnyObject) {
Login_button.delegate = self
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!){
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!){
self.performSegueWithIdentifier("Back", sender: self)
}
override func viewDidLoad() {
super.viewDidLoad()
Nome_Utente.text = "\(temp_nome)" + " " + "\(temp_cognome)"
email.text = "\(temp_email)"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
情報を正しく更新してもよろしいですか?要約ビューで、ユーザーの情報でUI項目を更新する場所はどこですか? –
はい、絶対に、ログインボタンをクリックしても問題ありません。役立つとすれば、完全なコードをアップロードすることができます –
あなたは、何が間違っているかをいつでも簡単に把握できます;) –