본문 바로가기

안드로이드/자바

[안드로이드/Android] 페이스북 로그인 연동

반응형

       이번 포스팅은 페이스북 로그인 연동입니다.


2017년 12월 10일 페이스북 로그인을 재 구현 하던중 변경된 부분을 발견해 일부 내용을 수정했습니다.

최신 문서는 여기를 통해서 확인해주시고, 혹여나 다른 내용이나 또 다시 변경된 부분이 발견돼 지적해주시면 수정하도록 하겠습니다.



1. App ID 생성


여기로 들어가 페이스북 로그인 후 새 앱 만들기를 통해 App ID를 생성합니다.






2.안드로이드 스튜디오 환경 설정


2-1. gradle(project) 설정

 

min sdk version을 15 이상으로 프로젝트를 설정하고 소스코드를 추가합니다



buildscript {
repositories {
jcenter()
mavenCentral() - 추가
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

2-2. gradle(app) 설정

 

페이스북 sdk를 사용하기 위해 소스코드를 추가합니다.



dependencies {
....
compile 'com.facebook.android:facebook-android-sdk:4.+'

compile 'com.facebook.android:facebook-android-sdk:[4,5)' - 추가

}

2-3. 리소스 추가

 

value/string.xml 에 생성했던 앱의 아이디 app_id 자리에 추가합니다.



<resources>

<string name="facebook_app_id">app_id</string>

<string name="fb_login_protocol_scheme"> fb_login_protocol_scheme </string>

</resources>

2-4.AndroidManifest.xml 설정


인터넷을 사용하기 위한 권한 설정요소와 meta-data요소 와 Facebook에 대한 활동 , Chrome 맞춤 탭에 대한 활동 및 인텐트 필터를 application 요소에 추가합니다.

그리고 실제 로그인시 띄울 Facebook 엑티비티를 추가합니다.



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

<application
.....
android:theme="@style/AppTheme">


<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="@string/fb_login_protocol_scheme" /> //- 추가
</intent-filter>
</activity>
<activity //-추가
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
</application>


3. 해시키 설정


해시키는 앱마다 갖고 있는 고유키라고 생각하시면 됩니다.  프로젝트의 해시키를 얻는 방법은 2가지가 있습니다.


3-1. commandline으로 해시키 구하기

 

아래와 같은 코드를 터미널(맥환경)에 입력합니다.

keytool -exportcert -alias androiddebugkey -keystore <debug_keystore_path> -storepass android -keypass android | openssl sha1 -binary | openssl base64

여기서 debug_keystroe_path는 실제 최소 한번의 디버그 이후 생성된 apk 경로를 적어주셔야합니다. ( /users/wony/.../app/outputs/apk/ )



 3-2. 소스코드로 키해시 구하기

private void getHashKey() {
try {
PackageInfo info = getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d(TAG, "key_hash=" + Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}

※위 2가지 방법중 후자인 소스코드를 선호합니다. 무슨 영문에서인지 전자의 방법은 후자와 결과값이 다르고, 제대로 작동을 하지 않습니다.


해시키를 등록하기 위해선 생성한 앱 페이지에서 제품추가 > 로그인 선택 > 플랫폼 선택 > 패키지명 입력 > 해시키등록 순서대로 진행하시면 됩니다.





4. 엑티비티 설정


4-1. 로그인 버튼 생성

 

다음과 같이 로그인 버튼을 생성합니다.



<com.facebook.login.widget.LoginButton
android:id="@+id/facebook_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>


4-2. 로그인 연동 

 

로그인시 페이스북 loginmanager에 결과를 전달하기 위한 코드를 아래와 같이 작성합니다.

FacebookSdk.sdkInitialize 가 디플리케이트 되어 코드를 아래와 같이 변경해야합니다. (17.12.10)





private CallbackManager callbackManager;

LoginButton facebook_login;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//facebook
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
callbackManager = CallbackManager.Factory.create();

facebook_login = findViewById(R.id.facebook_login);

facebook_login.setReadPermissions("email");

LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(TAG,"onSucces LoginResult="+loginResult);
}

@Override
public void onCancel() {
// App code
Log.d(TAG,"onCancel");
}

@Override
public void onError(FacebookException exception) {
// App code
Log.d(TAG,"onError");
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}


5.유저정보 얻기


로그인된 유저의 정보를 아래 코드를 통해 얻을 수 있습니다.

클릭리스너등을 통해 정보를 얻을 수 있습니다


Profile.getCurrentProfile();

5-1. 상세정보




이상으로 Facebook 로그인 연동 포스팅을 마침니다. 

문의사항 및 이의사항에 대해서는 댓글이나 방명록으로 남겨주시면 확인후 처리하겠습니다.

감사합니다.


 

반응형