Kotlin×Android에서 Facebook 인증 및 획득

새로운 앱을 개발할 수 있는 기회가 생겨서 Kotlin 개발 중에 SNS 인증 주위에
페이스북 SDK가 언제 버전 업데이트로 규격이 바뀌었는지 살짝 빠져들었을 때의 노트다.
※ 2017년 11월 15일 설치 방법입니다.
이번에 반한 건 특히 다음과 같습니다.
(날짜상 규격이 오래전부터 바뀌었는데...SNS 인증 관련에서 멀어지면 이렇게 된다

업그레이드 안내서에는 다음과 같은 내용만 기재되어 있다

리셋된 기록은 있지만 초기화된 설치 방법의 기록은 없습니다!
초기화된 설명을 삭제하고 실행하면 초기화되지 않아서 안 된다고 합니다.
FacebookSDK.sdkInitialize
그래.
https://developers.facebook.com/docs/facebook-login/android
여기서 찾아봤는데 기록이 없어요.(스타트 가이드에도 없어!!!)
그래서 다음 Facebook SDK의 Github부터 시작하겠습니다.
https://github.com/facebook/facebook-android-sdk
Facebook의 sdk Initialize 함수 제목 주석에서
* As part of SDK initialization basic auto logging of app events will occur, this can be
* controlled via 'com.facebook.sdk.AutoLogAppEventsEnabled' manifest setting
기록이 있기 때문에 manifest를 변경해 보세요.
AndroidManifest.xml
<meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="true" />
이렇게 하면 초기화할 수 있고 실행할 수 있다.
나는 이것이 시작 안내서에 쓰는 것이 가장 좋다고 생각한다.
지금까지 Kotlin은 거의 상관없어...
이번에는 Facebook LoginButton을 사용하지 않았기 때문에 다음과 같은 용도로 설치해 보았습니다.
그만큼 Kotlin 같아진 것 같아서...
AppLoginActivity.kt
private val fbCallback = CallbackManager.Factory.create()
// 以下の[loginFacebook]をクリックのListenerに登録しています
val loginFacebook : (v : View) -> Unit = {
    val fbInfo = SNSLoginUser.shared().fbInfo
    LoginManager.getInstance().apply {
        registerCallback(fbCallback, object:FacebookCallback<LoginResult> {
            override fun onSuccess(result: LoginResult?) {
                Log.e("INFO", "[Facebook Login Success]")
                // result?.accessToken?.token -> トークン
                // val fbProfile = Profile.getCurrentProfile() -> プロフィール情報
                // fbProfile.name -> ユーザー名(firstName/middleName/lastNameが一緒になったもの)
                // fbProfile.id -> result?.accessToken?.userIdと同じ
                // Profile.getCurrentProfile().getProfilePictureUri(300, 300).toString() -> プロフィール写真(今回は300x300のサイズで取得)
            }
            override fun onCancel() {
                Log.e("INFO", "[Facebook Login Cancel]")
            }
            override fun onError(error: FacebookException?) {
                Log.e("ERROR", "[Facebook Login Error]" + error.toString())
            }
        })
        logInWithReadPermissions(presentActivity, setOf("public_profile"))
        // 今回は"email"は不要だったので要求していない
    }
}
※ 위에 기재되지 않은 부분
onActivityResult 결과를 기다립니다, CallbackManager.onActivityResult를 통해 FacebookCallback 호출
※ Facebook SDK의 iOS와 Android는 상당히 높은 주파수로 업데이트되었으니 주의해야 합니다.이력서 갱신을 먼저 보시는 것을 추천합니다.

좋은 웹페이지 즐겨찾기