Firebase - 파이어베이스 트위터로그인
Firebase 콘솔에 내앱 추가하기
먼저 https://console.firebase.google.com/ Firebase 콘솔창에 접속해
Project Overview오른쪽의 톱니바퀴를 눌러
프로젝트설정-> 앱추가 -> 패키지이름 입력
->google-services.json 파일 다운로드하여 -> 안드로이드스튜디오 app 아래에 넣어주기
그리고 gradle.build(모듈)의 dependencies에 아래 내용을 추가합니다
dependencies {
...
//Firebase
implementation 'com.google.firebase:firebase-database:16.0.5'
implementation 'com.google.firebase:firebase-auth:16.0.5'
}
apply plugin: "com.google.gms.google-services"
그리고 gradle.build(프로젝트)
buildscript {
ext.kotlin_version = '1.3.11'
ext.anko_version='0.10.5'
repositories {
google()
jcenter()
}
dependencies {
...
classpath 'com.google.gms:google-services:4.2.0' // update version
}
}
allprojects {
repositories {
...
maven{
url "https://maven.google.com"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
트위터 계정 연동
트위터 계정과 연동하기 위해 https://developer.twitter.com/apps 에 접속해 개발자 사이트로 이동합니다.
위 사이트로 들어가면 우선 create a developer account 를 클릭해 개발자 계정을 만들어줍니다.
계발자 계정을 생성하고 apps를 클릭하면
위 사진처럼 create an app 버튼이 생기게 됩니다 . 클릭해 줍니다
빨갛게 되어있는 부분은 필수적으로 입력해주어야 하는 부분입니다 .
AppName과 description을 입력해주고 WebsiteURL은 아무사이트나 입력해줍니다.
그리고 가장 중요한 부분은 Enable Sign Twitter 를 꼭 체크해줍니다
Callback URLs 부분에 입력할 내용은
Firebase 콘솔창을 켜줍니다.https://console.firebase.google.com/
콘솔창에서 Authentication ->로그인방법 -> Twitter 를 클릭해 사용설정 해주고 아래에 있는
복사하기를 눌러 콜백 URL을 복사해줍니다.
https://chobeombook.firebaseapp.com/__/auth/handler 과
twittersdk:// 두개를 입력해줍니다
아직 API 키와 API 비밀번호는 입력하지않고 잠시 기달립니다.
다시 창으로 Twitter Develper 창으로 돌아와 콜백 URL과 Tell us how.. 를 입력하고 Create 버튼을 눌러줍니다.
내 메뉴를 클릭하고 Apss 를 눌러주면 아래와 같은 창이 뜨게 되는데
여기서 Keys and tokens를 눌러줍니다.
그렇게 되면 아래 사진처럼 API key와 secret 키를 볼수 있게됩니다.
위 두 키를 복사해 다시 파이어베이스 콘솔로 돌아와 아래 그림부분에 넣어주고 저장합니다.
그리고
permissions에 들어가 Additional permmision에 체크를 해주어야 되는데
활성화가 되어 있지 않습니다 . 느낌표를 확인해보면
Private police(개인정보 정책)URL과 Terms of Service(이용약관)URL을 입력하여야 한다고 합니다.
두 부분을 다시 입력하고 Permission 에 들어가보면
활성화가 된 것을 볼수 있습니다
Requset email address from users를 체크하여 줍니다. 그리로 Save
안드로이드 프로젝트 라이브러리 설정
gradle.build(모듈 수준)의 dependencies에 아래 코드를 작성합니다.
//twitter login
implementation 'com.twitter.sdk.android:twitter:3.1.1'
res/values/string.xml
<resources>
<string name="app_name">TwitterLogin</string>
....
<string name="twitter_consumer_key">Tqn4YWKhsexg3Exhk------ </string>
<string name="twitter_consumer_secret">PEcAbt0Q6bDVltUWXLhq2oEXhKgmPJ8c-------</string>
</resources>
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var twitterAuthClient: TwitterAuthClient
private lateinit var auth: FirebaseAuth
var loginState = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Configure Twitter SDK
val authConfig = TwitterAuthConfig(
getString(R.string.twitter_consumer_key),
getString(R.string.twitter_consumer_secret)
)
val twitterConfig = TwitterConfig.Builder(this)
.twitterAuthConfig(authConfig)
.build()
Twitter.initialize(twitterConfig )
setContentView(R.layout.activity_main)
auth = FirebaseAuth.getInstance()
twitterAuthClient = TwitterAuthClient()
twitterSignButton.setOnClickListener {
if (!loginState) {
twitterLogin()
} else {
loginState = !loginState
twitterSignButton.text = "트위터로그인"
signOut()
}
}
}
private fun twitterLogin() {
twitterAuthClient?.authorize(this, object : Callback<TwitterSession>() {
override fun success(result: Result<TwitterSession>?) {
if (result != null) {
handleTwitterSession(result.data)
toast("트위터 로그인성공")
twitterSignButton.text = "로그아웃"
loginState = !loginState
}
}
override fun failure(exception: TwitterException?) {
toast("트위터 로그인실패")
}
})
}
private fun handleTwitterSession(session: TwitterSession) {
Log.d("MainActivity", "handleTwitterSession:$session")
val credential = TwitterAuthProvider.getCredential(
session.authToken.token,
session.authToken.secret
)
auth.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d("MainActivity", "signInWithCredential:success")
val user = auth.currentUser
loginInfo.text="id : ${user?.displayName}"
} else {
// If sign in fails, display a message to the user.
Log.w("MainActivity", "signInWithCredential:failure", task.exception)
toast("Authentication failed.")
}
}
}
private fun signOut() {
auth.signOut()
TwitterCore.getInstance().sessionManager.clearActiveSession()
loginInfo.text="info"
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
twitterAuthClient?.onActivityResult(requestCode, resultCode, data)
}
public override fun onStart() {
super.onStart()
val currentUser = auth.currentUser
loginInfo.text=currentUser?.displayName
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" tools:layout_editor_absoluteY="81dp">
<Button
android:text="트위터로그인"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/twitterSignButton"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:text="signOut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/loginInfo" android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:layout_marginTop="46dp"
app:layout_constraintTop_toBottomOf="@+id/twitterSignButton" android:layout_marginEnd="12dp"
app:layout_constraintEnd_toEndOf="@+id/twitterSignButton"/>
</android.support.constraint.ConstraintLayout>
댓글