이번 포스팅은 페이스북 로그인 연동입니다. |
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);
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 로그인 연동 포스팅을 마침니다.
문의사항 및 이의사항에 대해서는 댓글이나 방명록으로 남겨주시면 확인후 처리하겠습니다.
감사합니다.
'안드로이드 > 자바' 카테고리의 다른 글
[안드로이드/Android] 애드몹 전면광고 달기 (13) | 2017.09.03 |
---|---|
[안드로이드/Android] 애드몹 배너 광고 달기 (5) | 2017.09.03 |
[안드로이드/Android] 카카오톡 로그인 연동 (20) | 2017.08.25 |
[안드로이드/Android] 인앱결제의 모든것 (9) | 2017.07.25 |
[안드로이드/Android] 안드로이드 스튜디오 2.3에서 앱 릴리즈시 이슈사항 (0) | 2017.05.15 |