[Android/Kotlin] 페이스북 로그인 API (Facebook Login API)

장똑대·2021년 9월 10일
0

1) 앱 만들기

1-1) 페이스북 회원가입 후 facebook developer 로 등록

1-2) 내앱 > 앱만들기

1-3) Facebook 로그인 설정 > 안드로이드 선택

  • 안드로이드 선택후 안내되는 단계에 필요한 정보를 모두 입력해 주어야합니다
  • 정보 입력시 필요한 기능들은 아래로 ㄱㄱ~

2) Facebook Login API

2-1) gradle에 라이브러리 추가

  • mavenCentral() - 아마 기본적으로 추가되어있을것이다

📄 build.gradle(Project)

repositories {
	...
        mavenCentral()
    }

📄 settings.gradle(Project Settings)

repositories {
	...
        mavenCentral()
    }
  • 공식문서에는 facebook-android-sdk:[4,5) 이런식으로 써있는데 왜인지 gradle sync가 안됐다
  • File > ProjectStructure > All dependencies 에서 com.facebok.android 항목을 찾아 update를 누르면 아래처럼 변환됨
    implementation 'com.facebook.android:facebook-login:11.3.0'

📄 build.gradle(Module)

dependencies {
	...
    implementation 'com.facebook.android:facebook-login:11.3.0'
}

2-2) 키해시 조회방법

  • 아래 코드를 MainAcitivity에 복붙후 실행하면 Logcat에서 키해시를 조회 할 수 있다
@RequiresApi(Build.VERSION_CODES.P)
override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)
	binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        try {
            val info = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES)
            val signatures = info.signingInfo.apkContentsSigners
            val messageDigest = MessageDigest.getInstance("SHA")
            for (signature in signatures) {
                val md: MessageDigest
                messageDigest = MessageDigest.getInstance("SHA")
                messageDigest.update(signature.toByteArray())
                val key = String(Base64.encode(md.digest(), 0))
                Log.d("Hash key", "$key")
            }
        } catch(e: Exception) {
            
        }
    }

2-3) Resource 및 Menifest 수정

  • 키해시 입력 후 생성된 facebook_app_id와 protocol_schema 를 strings 에 추가

📄 res/values/strings.xml

<resources>
    <string name="facebook_app_id">발급받은 값 복붙</string> 
    <string name="fb_login_protocol_scheme">발급받은 값 복붙</string>
</resources>

  • 인터넷 권한 추가
    <uses-permission android:name="android.permission.INTERNET"/>
  • <application> 태그 안에 있는 meta-data와 activity 추가 (facebook에서 제공해주는 코드를 복사 붙여넣기 하시면 됩니닷)

📄 AndroidMenifests.xml

<manifest>
    <uses-permission android:name="android.permission.INTERNET" />

    <application>
    	<!-- 여기서부터 -->
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter><action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
        <!-- 여기까지 복사 붙여넣기 -->
    </application>
</manifest>

2-4) 로그인 버튼 추가

📄 activity_main.xml

<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

2-5) 버튼 클릭이벤트 추가

📄 MainActivity.xml

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityLoginBinding
    lateinit var callbackManager: CallbackManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        
        callbackManager = CallbackManager.Factory.create()

        binding.loginButton.setReadPermissions("email")
        
            override fun onSuccess(loginResult: LoginResult?) { }
            override fun onCancel() { }
            override fun onError(exception: FacebookException) { }
        })
    }
}

내가 만든 버튼에 로그인 기능 추가하고 싶을때

binding.btnFacebookLogin.setOnClickListener {
	val loginManager = LoginManager.getInstance()
            
	loginManager.logInWithReadPermissions(this, Arrays.asList("public_profile"))
	loginManager.registerCallback(callbackManager, object : FacebookCallback<LoginResult?> {
    
	override fun onSuccess(loginResult: LoginResult?) { }
	override fun onCancel() { }
	override fun onError(exception: FacebookException) { }
	})
}
profile
장똑대와 안드로이드

0개의 댓글