akım FacebookLogin sürümü (0.2.0) in:
class MyViewController: UIViewController, FBSDKLoginButtonDelegate {
@IBOutlet weak var loginView : FBSDKLoginButton!
@IBOutlet weak var profilePictureView : FBSDKProfilePictureView!
override func viewDidLoad() {
super.viewDidLoad()
self.loginView.delegate = self
if (FBSDKAccessToken.currentAccessToken() != nil)
{
performSegueWithIdentifier("unwindToViewOtherController", sender: self)
}
else
{
loginView.readPermissions = ["public_profile", "email", "user_friends"]
}
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
println("User Logged In")
if ((error) != nil)
{
// Process error
}
else if result.isCancelled {
// Handle cancellations
}
else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email")
{
// Do work
}
}
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
println("User Logged Out")
}
}
Ardından TargetViewController içinde bir çözülme işlevi ekleyin özellik güçlü özellik olarak tanımlanır:
public class LoginButton: UIView {
...
/// Delegate of the login button that can handle the result, logout events.
public var delegate: LoginButtonDelegate?
... }
Eğer oturum açmayı eklerseniz düğmesi
... Facebook talimatları ve düğme yetki vererek UIViewController
çocuk sınıfını ayarlamak ... referans döngüsü oluşturulur. Görünüm, düğmeye güçlü bir referans içerecektir, düğme kontrolöre güçlü bir referans içerecektir ve kontrolör, görüşüne güçlü bir referans verecektir, bakınız bu post.
Çözümümün giriş düğmesine bir başvuru olması zayıf bir üye değişkeni kullanmaktı ve görünümü kaybolduğunda, düğme, temsilci nil olarak ayarlanır:
import UIKit
import FacebookCore
import FacebookLogin
import RxSwift
class LoginViewController: UIViewController, LoginButtonDelegate {
private weak var facebookLoginButton: LoginButton? = nil
override func viewDidLoad() {
super.viewDidLoad()
// Add the Facebook login button
let loginButton = LoginButton(readPermissions: [ .publicProfile, .email, .userFriends ])
loginButton.center = view.center
// WARNING!: Facebook login button delegate property is defined currently as STRONG.
// Therefore, it must be set to nil before leaving the view to avoid reference cycles
loginButton.delegate = self
view.addSubview(loginButton)
// Store the login button as a weak reference, since it is holded by the main view with a
// strong reference
facebookLoginButton = loginButton
}
override func willMove(toParentViewController parent: UIViewController?) {
super.willMove(toParentViewController:parent)
if parent == nil {
// The back button was pressed, interactive gesture used, or programatically pop view
// was executed
// Do not forget to set delegate in Facebook button to nil to break reference cycle.
facebookLoginButton?.delegate = nil
}
}
// MARK: - Facebook login
/**
Called when the button was used to login and the process finished.
- parameter loginButton: Button that was used to login.
- parameter result: The result of the login.
*/
func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) {
switch result {
case .failed(let error):
// Action on failed
case .cancelled:
// Action on cancelled
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
// Action on success
}
}
/**
Called when the button was used to logout.
- parameter loginButton: Button that was used to logout.
*/
func loginButtonDidLogOut(_ loginButton: LoginButton) {
// Action on logout
}
}
fonksiyonunu viewWillDissapear()
kullanmayın nil
delegesini ayarlamak için, uygulamanızın üstünde Facebook giriş sayfası gösterilecek, bu işlevi tetikleyeceğiniz ve artık temsilci olmayacağınız için giriş sonucunu alamayacağınız için. Gezinme denetleyicisindeki görünümler için this solution'un düzgün çalıştığını unutmayın. Modal pencereler için başka bir çözüm bulunmalıdır. Ben yardımcı olur umarım
, Xavi
Sen başarı-geri arama için kontrol etmelidir görünümünde (yani = başarı kaydedilir). Giriş yaptıysanız, başka bir görünüme "yönlendirebilirsiniz". –
Bu aptalca bir soru olabilir, ancak denetleyicide gerçek bir kod olmadığı için bunu nasıl yaparım? – Soporificdreamer