2016-03-26 30 views
4

Yardımlarınız için şimdiden teşekkür ederiz!Segue, Facebook ile giriş yaptıktan sonra tetiklenmeyecek Swift

Yazdığım hızlı bir uygulamada facebook oturum açma işlemi yapıyorum ve giriş tamamlandıktan sonra bir segue gerçekleştirirken sorun yaşıyorum. Ben üzerine bu izin/FB belirteçleri okumak ve geçmek mümkün duyuyorum, giriş düğmesi doğru uygulandığını

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: 
FBSDKLoginManagerLoginResult!, error: NSError!) 
    {} 

ve

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) 
    {} 

: FBSDKLoginButtonDelegate kapsamında

, ben iki yöntem var Amazon Cognito.

Garip olan şey, program aracılığıyla oturum açmayı farklı bir görünümde (denetleyici) ayırt edemem.

FB Oturum Açma Düğmesine basılması kullanıcıyı bir web tarayıcısına götürür (Facebook SDK tüm bunları ele alır) ve oturum açma işlemi gerçekleşir.

Ben yerleştirirseniz bir segue gibi: loginButton() içine

dispatch_async(dispatch_get_main_queue(), { 
     self.performSegueWithIdentifier("segueLoginViewtoHome", sender: nil }) 

, asla gerçekten web tarayıcısı uzağa gittiğinde yani, kullanıcı giriş düğmesiyle görünümüne döndürülür yürütür (segue tarafından tasarlanan yeni görünüm değil. Tarayıcı penceresinin giriş düğmesine (ve segue'e) ait görüntüye geri dönmeden önce satırın çalışacağına inanıyorum, ancak programın tek bir etkin ve tekrar görünür hale gelmesi için "bekle" seçeneğine nasıl söyleneceğine dair hiçbir fikrim yok. segue yapmak.

Bu durumun geçerli olduğuna inanıyorum çünkü aynı tarayıcı şifresini bir tarayıcıya geçmenin gerekmediği loginButtonDidLogOut() içine koyacak olsaydım, "oturum açma" işlemi sayfaya girdikten sonra segue düzgün çalışır Ekranın altından kayıyor.

Bu görünüm denetleyicisi, oturum kapandığında kodlanmış olması durumunda doğru şekilde çalışan segue tarafından gösterildiği gibi doğru şekilde temsilci olarak ayarlanır.

Herhangi bir yardım, uzun soru için özür diler ve çok teşekkür ederiz!

cevap

12

Bu sorunu, false olarak başlatılan fbLoginSuccess adlı global bir boolean oluşturarak düzelttim. Eğer Facebook giriş başarılı olduysa, fbLoginSuccess'ı segue işlemini gerçekleştirdiğiniz yere doğru olarak ayarladım. Sonra ben viewDidAppear() 'ı geçersiz kıldım ve fbLoginSuccess doğruysa segue işlemini gerçekleştirdim. Bunu düzeltir çünkü viewDidAppear() işlevi, tarayıcı penceresinden döndükten sonra yürütülür.

var fbLoginSuccess = false 

override func viewDidAppear(animated: Bool) { 
    if (FBSDKAccessToken.currentAccessToken() != nil && fbLoginSuccess == true) 
    { 
     performSegueWithIdentifier("loginSegue", sender: self) 
    } 
} 

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 
    print("User Logged In") 

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

Umut eder!

+0

Kusursuz - çağrı görünümüDidAppear tam olarak ihtiyacım olan yöntemdi. Yardım için teşekkürler! – kmypwn

+0

Ancak fark ettiğim garip bir şey-- Kullanıcı kod jeneratörü giriş yapmak zorundaysa, segue oluşmaz. Herhangi bir fikir? – kmypwn

+0

Sevindim, yardımcı olabilirim. Kod üreticisi ile ne demek istiyorsun? Bana bir örnek verebilirmisin? –

0

Yorum yapmak için yeterli bir itibarım yok, ancak 'VEYA' karşılaştırıcısını değiştirerek || || ' Girişin başarılı olup olmadığını kontrol etmek için AND '& &' bölümüne bakın ve benim için belirteç işe yaramadı. Aksi takdirde, bir sebepten dolayı giriş yapıp yapmadıklarına bakmazdım. Sorunum oldu mu, ama umarım başka birine yardım eder.

İlgili konular