안드로이드

안드로이드 페이스북 로그인 기능 구현하기 android app facebook login

알통몬_ 2017. 10. 17. 14:47
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 안드로이드 페이스북 로그인 기능을 구현하는 방법에 대해 알아보겠습니다.

https://developers.facebook.com/docs/facebook-login/android/?locale=ko_KR


1.위 사이트에 들어가신 후 

2.내 앱▼ 탭에서 새 앱 추가를 선택해주세요.

그리고 표시 이름을 입력해주세요.

3. 페이스북 로그인을 선택하고, 어떤 플랫폼에 적용할 지를 선택해주시면 됩니다.

우리는 안드로이드를 선택하면 되겠죠.


그러면 자세히 알아볼까요.

ㄱ. 먼저 안드로이드 프로젝트를 하나 만듭니다.

그리고 build.gradle(project:...) 에는 mavenCentral() 코드 한줄을

1
2
3
4
5
6
7
 
buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    
cs

build.gradle(module:app) 에는

1
2
3
4
5
6
 
dependencies {
    ...
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'
 
}
cs

라이브러리를 넣어줍니다.

Android SDK는 따로 없어도 잘 동작합니다.


ㄴ. 생성한 프로젝트의 정보를 입력합니다.

입력 후 Save 버튼을 누르면 아래처럼 알림창이 하나뜨는데 가볍게 무시하고 '이 패키지 이름 사용'을

선택하시면 됩니다.

ㄷ. 그 다음은 해시키가 필요한대요.

윈도우 기준으로 cmd 창을 여시고

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64

아래 명령어 입력하시면 해시키가 뜹니다.

맥은

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

알아낸 해시키를 아래에 입력하고 Save

ㄹ.  SSO 란 SSO(Single Sign On)는 가장 기본적인 인증 시스템으로, '모든 인증을 하나의 시스템에서'라는 목적하에 개발된 것이다 

라고 하네요. 저는 예를 선택하고 저장했습니다.


ㅁ. manifest.xml 수정은 아래에서 시키는대로 하면 됩니다.


ㅂ. 위의 7번, 8번 + a 를 동시에 진행합니다.

먼저 activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <com.facebook.login.widget.LoginButton
        android:layout_gravity="center"
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />
</LinearLayout>
 
cs


MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
 
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.Profile;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
 
import org.json.JSONException;
import org.json.JSONObject;
 
import java.util.Arrays;
 
 
public class MainActivity extends AppCompatActivity {
 
    LoginButton loginButton;
    CallbackManager callbackManager;
    TextView userEmailTv;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
        setContentView(R.layout.activity_main);
        loginButton = (LoginButton)findViewById(R.id.login_button);
        userEmailTv = (TextView) findViewById(R.id.userEmailTv);
        loginButton.setReadPermissions("email");
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("getAccessToken()"String.valueOf(loginResult.getAccessToken()));
                        Log.d("getId()"String.valueOf(Profile.getCurrentProfile().getId()));
                        Log.d("getName()"String.valueOf(Profile.getCurrentProfile().getName())); // 이름
                        Log.d("getProfilePictureUri"String.valueOf(Profile.getCurrentProfile().getProfilePictureUri(200200)));//프로필 사진
                        getUserEmail(loginResult);
 
                    }
 
                    @Override
                    public void onCancel() {
                        // App code
                    }
 
                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                    }
                });
    }
    public void getUserEmail(LoginResult loginResult){
        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        try {
                            String email = response.getJSONObject().getString("email");
                            Log.d("email", email);
                            userEmailTv.setText(email);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
 
                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields""email");
        request.setParameters(parameters);
        request.executeAsync();
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
 
}
 
cs

이름, email, 프로필 사진 등등을 모두 가져올 수 있습니다.

마지막으로 실행화면입니다.

로그인버튼을 누르면 버튼의 텍스트가 로그아웃으로 바뀌는 것을 알 수 있습니다.





반응형