Firebase Authentication에서 Twitter OAuth를 사용하여 Twitter API에 요청
12289 단어 트위터iOSFirebaseSwiftFirebaseAuth
설정 주위에 관해서는 이미 몇개의 기사가 있으므로, 주로 iOS/Swift에서의 구현 부분에 대해서 쓰고 싶습니다.
그래서 바로 만들어 봅시다 👨🍳🐟
환경
Twitter 개발자 계정 등록
Twitter API 등록(계정 신청 방법)으로부터 승인될 때까지의 순서 정리※2019년 8월 시점의 정보
이쪽이 매우 참고가 됩니다 💁♀️
Firebase Authentication 설정
이번까지는 공식 문서 를 보면 특히 헤매지 않고 구현할 수 있다고 생각합니다💁♂️
Firebase Cloud Messaging에서 메소드 구현 교체을 사용하지 않도록 설정하는 경우 설정에 주의해야 합니다.
인증 후 SafariViewController가 닫히지 않고 로그인에 실패합니다.
Info.plist에서
FirebaseAppDelegateProxyEnabled
를 설정한 경우 값을 YES로 설정해야 합니다.또한
UIWindowSceneDelegate
가 구현된 경우에도 위와 유사한 현상이 발생할 수 있습니다.그 경우는 다음을 해 봅시다.
1. SceneDelegate.swiftをProjectから削除
2. AppDelegate内の関連する箇所でエラーが出るのでコードを削除
3. Info.plistのApplication Scene Manifestを削除
4. AppDelegateのプロパティにUIWindowを追加
FirebaseAuth에서 OAuth 인증 구현
거칠게 다음과 같은 처리가 됩니다(에러 처리 등은 생략하고 있습니다)
취득한 AccessToken과 Secret은 우선 Keychain에 등록하고 있습니다.
class Login {
private var provider: OAuthProvider?
func signinByTwitter() {
provider = OAuthProvider(providerID: "twitter.com")
provider?.getCredentialWith(nil) { credential, error in
guard let credential = credential, error == nil else {
return
}
Auth.auth().signIn(with: credential) { result, error in
guard error == nil else {
return
}
if let credential = result?.credential as? OAuthCredential,
let accessToken = credential.accessToken,
let secret = credential.secret {
let keychain = Keychain(service: Bundle.main.bundleIdentifier!)
try? keychain.set(accessToken, key: "accessTokenKey")
try? keychain.set(secret, key: "accessTokenSecretKey")
}
}
}
}
}
구현에서도 일점 조심하는 일이 있어,
OAuthProvider
를 클래스의 프로퍼티등 참조가 보관 유지되는 형태로 가져 둘 필요가 있습니다.OAuthProvider가 해제되면 내부적으로 메서드가 호출되지 않고 인증을위한 SafariViewController가 표시되지 않습니다.
OAuthSwift로 API에 요청
Firebase에서 OAuth의 AccessToken과 Secret을 이미 취득했으므로 Twitter의 API 요청에는
OAuthSwiftClient
를 사용하고 있습니다.ConsumerKey
또는 ConsumerKeySecret
는 개발자 사이트에서 가져옵니다.이번에는 설정 정보에서 표시 이름을 가져오기로 합니다.
struct TwitterSetting: Decodable {
let screenName: String
enum CodingKeys: String, CodingKey {
case screenName = "screen_name"
}
}
class TwitterDataStore {
func fetchSettings() {
let consumerKey = "ConsumerKey"
let consumerKeySecret = "ConsumerKeySecret"
let keychain = Keychain(service: Bundle.main.bundleIdentifier!)
guard let accessToken = try? keychain.get("accessTokenKey"),
let accessTokenSecret = try? keychain.get("
accessTokenSecretKey"),
let url = URL(string: "https://api.twitter.com/1.1/account/settings.json") else {
return
}
let client = OAuthSwiftClient(
consumerKey: consumerKey,
consumerSecret: consumerKeySecret,
oauthToken: accessToken,
oauthTokenSecret: accessTokenSecret,
version: .oauth1
)
client.get(url) { result in
switch result {
case .success(let response):
guard let setting = try? JSONDecoder().decode(TwitterSetting.self, from: response.data) else {
return
}
print(setting)
case .failure:
break
}
}
}
}
이제 표시 이름이 표시되어야합니다 ✌️
Reference
이 문제에 관하여(Firebase Authentication에서 Twitter OAuth를 사용하여 Twitter API에 요청), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xen/items/6324b341bd8bbdf187e9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)