OAuthSwift ile Twitter API Kullanımı

En son güncellendiği tarih: 6 gün önce

Twitter API, geliştiriciler için twitter rest servislerine erişim imkanı sağlar. API'yle, Twitter uygulamasında bir kullanıcının sahip olduğu tüm fonksiyonlara erişimin yanı sıra, uygulama arayüzüyle sunulmamış servisler de geliştiricilere sunulur. API'nin sahip olduğu tüm servisleri buradan inceleyebilirsiniz.

Hedef

1- Twitter üzerinden developer account ve uygulama (consumer/secret key) oluşturmak

2- Swift ile rest api'ye erişim sağlayacak, server bağımlılığı olmayan ios demo uygulaması geliştirmek. Authentication ve API servis çağrımı için OAuthSwift kütüphanesini kullanmak. Senaryo: Uygulama ile bir twitter hesabına login olmak, ardından herhangi bir kullanıcının takipçilerini listelemek ve bu liste içinden takip edilmeyen kullanıcılara takip isteği göndermek.


Sonuç

Yazıya başlamadan önce aşağıdaki demo video'sunu izleyerek çalışma sonunda elde edeceğiniz çıktıyı inceleyebilirsiniz.




1- Twitter Developer Account ve Consumer Key Oluşturmak


UYARI: Temmuz 2018 öncesinde Twitter API erişimi için twitter üzerinden uygulama oluşturup consumer/secret key almak ve api'ye erişmek çok kolaydı. Ancak değişen politika sonrası artık developer account'ına başvurmanız, review sürecine girmeniz ve başvurunuzun onaylanması gerekiyor. Ardından bu account üzerinden uygulama ekleyerek api erişimi sağlayabilirsiniz. Bu yazıda Temmuz 2018 öncesi elde ettiğimiz consumer/secret key ile demoyu oluşturacağız. Ancak yeni developer hesabını, review sürecine iletme aşamalarını da hızlıca sizlerle paylaşmak istedik.


Developer Account Başvurusu


- Twitter'a login olduktan sonra bu sayfada bulunan create an app butonu basınız.


- Açılan sayfada developer account'ı hangi amaçla kullanmak istediğinizi bildirmek amacıyla kategori seçimi yaparak next butonuna basınız.


- Developer hesabı yaratılabilmesi için twitter hesabınıza tanımlı bir cep telefonu numarasını tanımlamanız ve doğrulamanız gerekiyor.



- Ardından review sürecinde değerlendirilecek olan kullanım bilgilerini girmeniz gerekiyor. Burada review onayı alabilmeniz için gireceğiniz bilgiler çok önemli. Twitter'ın detaylı açıkladığı developer policies'e uygun şekilde bir kullanımı amaçlamalısınız. Ardından Looks good butonu ile başvurumuzu review sürecine iletiyoruz.












Callback Metodu Oluşturmak ve Consumer/Secret Key Tanımlamak


- Review sürecinden onay alınması durumunda oluşturduğunuz uygulamayı, aşağıdaki şekilde bu url'den görüntüleyebilirsiniz. Uygulamamızın ismini SpringSocialWebMVC olarak tanımladık.

Details butonuyla uygulama detaylarına giriyoruz.

- App details altında Website URL olarak http://127.0.0.1:8080 tanımladık. Enable Sign in with Twitter özelliğini aktif ediyoruz. Callback URL için http://127.0.0.1:8080/SpringSocial/index.html değerini verdik. Bu url'i twitter sdk'sı auth işleminde kullanacağız.



- Consumer/Secret oluşturmadan önce son olarak Permissions tab'ını açıyoruz. Access permission ayarında read, write ve direct messages alanlarını enable ediyoruz.

- Son olarak Keys and tokens tab'ını açıyoruz. Burada Consumer API anahtarımızı generate ediyoruz. Consumer ve secret key değerlerini api erişimi sırasında birazdan kullanıyor olacağız.


2- OAuthSwift ile Authentication ve API Call Yapacak Swift Uygulaması


Authentication

Demo uygulamamızda authentication işlemlerini OAuthSwift ile yaparak bir çok yükü bu kütüphaneye bırakacağız. Ancak öncesinde Twitter API'de bulunan iki tip authentication yönteminden biraz bahsedelim.


1 - OAuth2 (bearer token)

Bu yöntem uygulama bazlı public read-only data içeren servislerin çağrılması için kullanılıyor. Yani developer account ile oluşturduğunuz uygulamaya, herhangi bir twitter hesabının login olmasına ihtiyaç duyulmadan çağırılabilecek servisler için kullanılıyor. Örnek x tag'i geçen paylaşım listesini çek gibi public bilgiler. Demo'muzda bu token ile işlem yapmayacağız. Detaylar


header: consumer/secret key

post url: https://api.twitter.com/oauth2/token

response: body'de access_token


2 - OAuth 1a (access token for user context)

Bu yöntemde kullanıcı bazlı servislerin çağrılabilmesi için token elde edilir. Kullanıcının oluşturulan uygulama üzerinden twitter hesabına login olması ve auth ile oluşan access_token'ın elde edilmesi gerekiyor. Elde edilen token ile ilgili servislerle read/write işlemleri (örn follow, unfollow) yapılabiliyor. 3 aşamalı oauth ile gerçekleşiyor. Demomuzda bu yöntemi kullanacağız, aşağıdaki entegrasyonu OAuthSwift sdk'sı yapıyor olacak ancak biz yine de çalışma mantığını anlatalım. Detaylar


a) Öncelikle oauth_callback ve oauth_consumer_key ile https://api.twitter.com/oauth/request_token adresine post ile gidiyoruz. response'da oauth_token alanını elde ediyoruz.


b) Elde ettiğimiz oauth_token alanını https://api.twitter.com/oauth/authorize?oauth_token= adresinin sonuna eklereyek, adresi webview ile kullanıcıya açıyoruz. Kullanıcı burada twitter'a login oluyor. Başarılı login sonrası ilettiğimiz call_back url'imiz oauth_token ve oauth_verifier alanlarıyla call ediliyor.


c) Elde ettiğimiz bu iki alan + ouath_consumer_key alanıyla https://api.twitter.com/oauth/access_token servisini post ediyoruz ve servislere erişimde kullanacağımız oauth_token'ı elde ediyoruz.


Bu işlemleri OAuthSwift ile nasıl kolayca gerçekleştireceğimize ve demoya geçebiliriz.


OAuthSwift Kurulumu


Öncelikle pod dosyamıza OAuthSwift'i ekliyoruz ve sırasıyla aşağıdaki pod install komutlarını pod dizininde xcode kapalıyken çalıştırıyoruz. (4 komut ile diğer pod dosyalarınız da sıfırdan yüklenir/düzenlenir)


sudo gem install cocoapods-deintegrate cocoapods-clean

pod deintegrate

pod clean

pod install


Demo

  • Uygulama ekranını ihtiyacımız doğrultusunda aşağıdaki şekilde tasarladık. Basitçe kullanıcı auth butonuyla webview üzerinden twitter hesabına auth olacak.

  • Ardından input alana yazacağı twitter hesabının son 5 takipçisini find user's followers butonuyla listeleyecek.

  • Son olarak listelenen hesaplardan takip etmediği bir hesabı follow butonuyla takip edecek.


Authorization


Auth butonu tıklandığında aşağıdaki doAuthTwitter() fonksiyonunu call ediyoruz. Bu metodda

OAuth1Swift objesini az önce elde ettiğimiz consumerKey, secretKey ve ilgili url bilgileriyle oluşturuyoruz.


Ardından objenin authorizeURLHandler nesnesine webView içeren WebViewController'ımızı set ediyoruz. Bu controller'ın OAuthWebViewController objesinden türetilmiş olması gerekiyor. Birazdan WebViewController'ı da detaylı anlatıyor olacağız.


Son olarak authorize metodunu OAuth1Swift objemiz üzerinden call ediyoruz. Bu call işlemine input olarak twitter api console'da oluşturduğumuz call back url'i de verdiğimizi belirtelim. (http://127.0.0.1:8080/SpringSocial/index.html)


authorize metodunun call işlemi sonrası oluşturduğumuz WebViewController aşağıdaki şekilde twitter authorize sayfasıyla açılıyor.



WebViewController


Öncelikle şunu belirteyim, ben detayı bilmek istemiyorum direk controller'ı kullanmak istiyorum diyorsanız uygulamadaki Constants.callback değerini kendi callback url'inizle set edip direk controller'ı kullanabilirsiniz. Aşağıdaki bölümü okumadan Servis çağrımı : followers/list ve friendships/lookup bölümüne geçebilirsiniz.


Controller'ımızı OAuthSwift authentification handler objesi olan OAuthWebViewController'dan türettiğimizi söylemiştik. Yukardaki şekilde controller önyüze gelirken sırasıyla aşağıdaki 3 metod otomatik olarak çalışıyor. Araya debug koyarak OAuthSwift kütüphanesinin handle metoduna aşağıdaki url'in düştüğünü ve sonrasında bu url ile loadAddressURL metodunda webView'ın load edildiğini takip edebilirsiniz.


  • URL "https://api.twitter.com/oauth/authorize?oauth_token=cKyOkAAAAAAAxxxxxxxxxxxxxxxxxx"


Twitter hesabımızın login bilgilerini girdikten sonra Authorize App butonuna basıyoruz. Ardından

UIWebViewDelegate'in metodu olan shouldStartLoadWith metodu aşağıdaki url ile call ediliyor.


Eğer girdiğiniz bilgiler doğruysa aynı metod bu sefer console'da tanımladığınız callBack url'iniz ile call ediliyor.


Bu noktada url.absolute değerini hasPrefix ile aşağıdaki şekilde kontrol edip, tanımladığınız callBack url'i içerip içermediğine bakmalısınız. İçeriyorsa login işlemi başarılı demektir ve aşağıdaki şekilde handle metodunu url ile call etmeniz gerekir. Böylece OAuthSwift api erişimi için gerekli tokenları almış olur. Ardından webView'ı da dismiss ile kapatabilirsiniz.

  • OAuthSwift.handle(url: url)



Servis çağrımı : followers/list, friendships/lookup ve frendships/create


Artık Authorize olduğumuz oauthswift objesi ile kullanıcı bazlı token gerektiren servisleri call edebiliriz. Peki servisin kullanıcı bazlı olduğunu nasıl anlarız ? Twitter api doc'de her servis için bunu inceleyebilirsiniz. Biz ilk call edeceğimiz followers/list servisi için inceleme yapalım.


followers/list


Bu servis, bir kullanıcının takipçi listesine erişimimizi sağlıyor. Bu url'den servisin bilgilerine erişiyoruz. Aşağıda görüldüğü gibi requires authentication Yes olarak belirtilmiş. Biz auth işlemini oauthswift üzerinden yapmıştık, token bilgilerini sdk servis call sırasında otomatik olarak iletecek. Ayrıca her user her 15 dakikada max 15 servis çağrısı yapabiliyor.

Servisin inputları incelediğimizde screen_name (hesap adı) count ve cursor değerlerini göndermemizin yeterli olacağını görüyoruz. screen_name alanına kullanıcının ekranda girdiği hesap adını iletiyoruz, count olarak da 5 değerini aşağıdaki şekilde set ediyoruz.


cursor değerini -1 yolluyoruz. Bu alanı daha çok data çekeceğimiz zaman kullanmamız gerekiyor. Servis bir seferde max 200 kayıt dönüyor. Böyle bir durumda response'da dönen next_cursor alanını bir sonraki call sırasında cursor değerine iletebilirsiniz.


oauthswift.client.request metoduyla aşağıdaki şekilde followers/list servisini call ediyoruz. Diğer servis çağrılarımızı da aynı metod ile gerçekleştireceğiz.


Response'da dönen result datayı JSONDecoder().decode ile FollowerResponse objesine dönüştürüyoruz. Bu objeyi servis bilgilerinin olduğu sayfanın alt bölümünde bulunan Example Response bbölümündeki alan bilgileriyle oluşturduk.

Artık elimizde herhangi bir user'ın follower listi var bu ok, ancak acaba auth olduğumuz hesap bu hesapların hangilerini takip ediyor. Bu bilgiyi alıp, takip etmediğimiz hesaplar için ekranda yeşil follow butonu koymalıyız. Takip ettiğimiz hesaplar için de mavi following butonu çıkarabiliriz. Bu amaçla friendships/lookup servisini de çağırıyoruz.


friendships/lookup


Bu servisi yukardaki servis gibi detaylı anlatmayacağız. Bilgilerine linkten erişebilirsiniz.

Servisi aşağıdaki şekilde call ediyoruz. Bu servis bize, ilettiğimiz hesaplarla ilişki durumumuzu dönecektir. İnput olarak "screen_name" alanına birleşik tek string vermemiz gerekiyor ve bu string "xxx,yyy,zzz" formatında hesap isimlerinden oluşmalı.



Servis cevabında aşağıdaki AccountRelation objesinden oluşan bir liste alıyoruz.

Servis her hesap için connections bilgisini dönüyor.

connections string array'i aşağıdaki string değerlerinin bir ya da birden fazlasını içerebiliyor

  • following : Auth olduğunuz hesap bu hesabı takip ediyor

  • following_requested : Auth olduğunuz hesap bu hesaba takip isteği gönderdi

  • followed_by : Auth olduğunuz hesap bu hesap tarafından takip ediliyor

  • none : Auth olduğunuz hesabın bu hesapla hiç bir ilişkisi yok

Bu statulere göre table view'ımızı aşağıdaki şekilde oluşturuyoruz.

frendships/create


Son olarak follow servisini inceleyelim. Yukarıda follow edebileceğimiz hesapların yanına yeşil follow butonunu yerleştirmiştik. Buton'a tıkladığımızda aşağıdaki şekilde servisi screen_name (hesap adı) parametresiyle call ediyoruz. Başarılı response almamız durumunda listeleme servislerini tekrar çağırıyoruz ve takip etme istediğinde bulunduğumuz hesabın following statu'de ekranda listelendiğini görerek işlemin başarılı bittiğini teyit ediyoruz.


Twitter api servislerini kullanabilmek için hesabımızla nasıl auth olduğumuzu ve servisleri nasıl call ettiğimizi görmüş olduk. Twitter api ile istediğiniz kurguyu oluşturabilir, ihtiyaçlarınıza ve hayal gücünüze göre senaryoları gerçekleştirebilirsiniz.


API detayları için: https://developer.twitter.com/en/docs


Oluşturduğumuz demo projesini indirip kullanabilirsiniz. Yapmanız gereken tek şey Constants.swift dosyası içerisinde bulunan twitterConsumerKey, twitterSecretKey ve callback değerlerini kendi developer hesabınızla oluşturduğunuz uygulamanın bilgileriyle değiştirmektir.

Demo video'ya yazının başındaki Sonuç bölümünden erişebilirsiniz.


Github: https://github.com/dogukantizer/Twitter-API-authentication-and-service-call-with-OAuthSwift


#twitterapi #swift #ios



Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın