16 Şubat 2015 Pazartesi

IOS Swift - Facebook Login Custom Button Oluşturma

Merhaba, Swift yeni sayılabilir bir dil olduğundan sosyal medya araçları ile login işleminde biraz sıkıntı çektim. Facebook, Twitter ve Google+ ın üçünü kullanabileceğim hazır bir kütüphane bulamadım ve ayrı ayrı yapmaya karar verdim.
Fakat bu 3 uygulamayı beraber kullanırken arayüzün kendi sistemime uygun olması gerekiyordu. Bu yüzden Facebook'un sağladığı Facebook login button ile giriş yapmak tasarımı etkileyecekti. Kendi buttonumu kullanıp bunu facebook ile bağlamam gerekiyordu.

Bunu yapmak için öncelikle Facebook SDK'yı uygulamama ekledim ve aşağıdaki adrestaki adımları takip ederek Facebook Login Buttonu uygulamama entegre ettim. (Aşağıdaki yazının sonunda örnek bir uygulama da mevcut Facebook uygulamanızı oluşturup api keylerini eklediğinizde çalışacaktır. )

http://www.brianjcoleman.com/tutorial-facebook-login-in-swift/

Fakat buradaki uygulamada gördüğünüz gibi Facebook'un kendi login butonu kullanılıyor ve bunun içindeki texti ve buttonun şeklini değiştiremiyoruz. Bu hazır bir yapı ve projeye FBLoginView olarak ekleniyor. Benim istediğim şey kendi oluşturduğum buttona tıkladığımda bu FBLoginView'e tıklanmış gibi işlem yapabilmek ve FBLoginView'i gizleyerek kendi butonumu fb login butonu haline getirmekti.

Bunun için öncelikle AppDelegate.swift dosyamın

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool metoduna aşağıdaki kodları ekledim.



 




if FBSession.activeSession().state == FBSessionState.CreatedTokenLoaded
{

// If there's one, just open the session silently, without showing the user the login UI
FBSession.openActiveSessionWithReadPermissions(["public_profile"], allowLoginUI: false, completionHandler: {
(session, state, error) -> Void in
self.sessionStateChanged(session, state: state, error: error)
})
}







Bu metodun hemen altına ise aşağıdaki sessionStateChanged metodunu ekledim.





func sessionStateChanged(session : FBSession, state : FBSessionState, error : NSError?)
{
// If the session was opened successfully
if state == FBSessionState.Open
{
println("Session Opened")
}
// If the session closed
if state == FBSessionState.Closed
{
println("Closed")
}
}





AppDelegate.swift dosyamızdaki işlem tamamlandı. Sıra facebook butonumuzu oluşturmaya geldi.
Bunu storyboardda istediğimiz şekilde oluşturduktan sonra ViewController.swift dosyamıza control tuşu ile birlikte sürükleyerek action oluşturuyoruz.
Bu action metodunun içine fb login kodlarını aşağıdaki gibi ekliyoruz. Ben login butonumun action metoduna fbloginButtonAction ismini verdim.





@IBAction func fbloginButtonAction(sender: AnyObject) {

if (FBSession.activeSession().state == FBSessionState.Open || FBSession.activeSession().state == FBSessionState.OpenTokenExtended)
{
// Close the session and remove the access token from the cache
// The session state handler (in the app delegate) will be called automatically
FBSession.activeSession().closeAndClearTokenInformation()
}
else
{
// Open a session showing the user the login UI
// You must ALWAYS ask for public_profile permissions when opening a session
FBSession.openActiveSessionWithReadPermissions(["public_profile"], allowLoginUI: true, completionHandler: {
(session:FBSession!, state:FBSessionState, error:NSError!) in

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
// Call the app delegate's sessionStateChanged:state:error method to handle session state changes
appDelegate.sessionStateChanged(session, state: state, error: error)
})
}


}






Artık önceden oluşturduğumuz fbloginview viewini hidden yapabiliriz. Bunun için main.storyboard'da fbloginview'e tıklayıp sağdaki menüden ortadaki view seçeneğine gelip hidden seçeneğine tik atmamız yeterli.

Bu işlemlerden sonra yeni facebook butonumuza tıkladığımızda eskisiyle aynı şekilde çalışacak ve tekrar tıkladığımızda facebooktan çıkış yapılacaktır.

İnşallah yardımcı olmuştur. Güle güle kullanın.

Hiç yorum yok:

Yorum Gönder