【iOS】TwitterKit가 아니고 「Swifter」로 Twitter 로그인한다

신규 앱을 만들 때는 FirebaseAuth를 사용하여 로그인을 구현하는 경우가 많으며 Facebook 로그인이나 Twitter 로그인을 자주 사용합니다.

Facebook의 iOS SDK는 안정적이고 사용하기 쉽습니다만, Twitter 공식이 일찌기 메인터넌스하고 있었다 TwitterKit (2018년 10월 공식 지원이 종료됨)

그래서 이번에는 iOS에서 Twitter 로그인을 할 때 TwitterKit보다 추천하는 Swifter를 소개합니다.



mattdonnelly/Swifter

설치



htps : //는 wks의 w㎉g. bgs포 t. 이 m/2016/09/와 ぇ에 ぃぃthーすぃf하여 r. HTML 의 기사가 상세합니다. cocoapods 등은 지원하지 않으므로 Embedded Binaries로 추가합시다.

Swifter에서 Twitter 로그인



미리 Twitter Developer에서 앱을 만들고 consumerKey와 consumerSecret을 가져옵니다.

ViewController.swift
import Swifter

let swifter = Swifter(
    consumerKey: "<--Twitter Developerで作ったconsumerKey-->",
    consumerSecret: "<--Twitter Developerで作ったconsumerSecret-->"
)
swifter.authorize(
    withCallback: "<-アプリに帰ってくるためのコールバックURL->",
    presentingFrom: self,
    success: { accessToken, response in
        // このあとaccessToken使うよ
}, failure: { error in
    print(error)
})

성공하면 accessToken을 얻을 수 있으므로 이것을 나중에 사용합니다. (다음 장)

safari에 날고 로그인 한 후 다시 이렇게이 AppDelegate에 다음과 같이 씁니다.

AppDelegate.swift
import Swifter

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    return Swifter.handleOpenURL(url, callbackURL: "<-アプリに帰ってくるためのコールバックURL->")
}

추가



로그인하는 화면의 ViewController를 SFSafariViewControllerDelegate를 준수하는 것을 잊지 마세요! 준수하면 앱 내에서 safari가 열립니다. (준수하지 않으면 외부 safari로 날아가서 a poor user experience라는 이유로 앱이 Apple에 거부되었습니다.)

ViewController.swift
import SafariServices

class ViewController: UIViewController, SFSafariViewControllerDelegate {

}

accessToken 사용법



방금전의 authorize 메소드로 accessToken 를 취득할 수 있습니다. 이것은 String가 아니고, Credential.OAuthAccessToken 라고 하는 Swifter가 만들고 있는 형태로, 몇개의 파라미터를 가집니다.

이번에는 여기에서 key와 secret을 가져옵니다.

authorize 메소드의 success 중
guard let accessToken = accessToken else {
    return
}
let oAuthToken = accessToken.key
let secret = accessToken.secret

로컬로 사용



예를 들면 로컬에서 이대로 Swifter의 기능인 Twitter 투고를 하고 싶은 경우는, 다음으로부터 로그인 없이 할 수 있도록, 이 accessToken.keyaccessToken.secret 를 UserDefaults등에 넣어 둡니다.

그런 다음 다음과 같이 swifter를 init하여 사용할 수 있습니다.
let swifter = Swifter(
    consumerKey: "<--Twitter Developerで作ったconsumerKey-->",
    consumerSecret: "<--Twitter Developerで作ったconsumerSecret-->",
    oauthToken: oAuthToken, //ローカルに保存していたやつ
    oauthTokenSecret: secret //ローカルに保存していたやつ
)
swifter.postTweet(status: shareText, success: { status in

}, failure: { error in

})

Firebase로 로그인



FirebaseAuth로 로그인하려면 FirebaseAuth TwitterAuthProvider.credential를 만들어 로그인할 수 있습니다.
import Firebase

let credential = TwitterAuthProvider.credential(
    withToken: oAuthToken,
    secret: secret
)
Auth.auth().signIn(with: credential, completion: { (authResult, error) in

})

Firebase 공식 문서 에서는, twitterKit로 이 authTokensecret 를 취득하고 있습니다만, Swifter로 취득한 것을 여기에 넣으면 나머지는 같은 순서로 갈 수 있습니다.

TwitterKit과의 차이



TwitterKit은 Twitter 네이티브 앱이 있는 경우 앱에 날아 인증합니다. Swifter의 경우 앱이 있어도 Safari를 시작하고 인증합니다.

또, TwitterKit의 Twitter 투고는 전용의 ViewController를 낼 필요가 있습니다만, Swifter라면 코드만으로 완결합니다.

이상입니다. 자세한 것은, mattdonnelly/Swifter 의 리포지토리의 샘플 코드나 Readme에.

관련 링크



htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 맞는 th / 이오 s / 라고 r-ㅉ 긴? hl = 그럼
htps : //는 wks의 w㎉g. bgs포 t. 이 m/2016/09/와 ぇ에 ぃぃthーすぃf하여 r. HTML
htps : // 기주 b. 코 m / t t don ly / su f r

좋은 웹페이지 즐겨찾기