공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
앞선 세 개의 포스팅에서 안드로이드
페이스북 로그인
2017/10/17 - [안드로이드] - 안드로이드 페이스북 로그인 기능 구현하기 android app facebook login
네이버 로그인
2017/10/17 - [안드로이드] - 안드로이드 네이버 아이디 로그인 구현하기 android naver id login
카카오 계정 로그인
2017/10/18 - [안드로이드] - 안드로이드 카카오계정 로그인 구현하기 android kakao login
하는 방법에 대해 알아보았는데요.
이제 마지막으로 구글 이메일로 로그인하는 방법에 대해 알아보겠습니다.
*프로젝트의 소스코드들은 구글에서 제공하는 깃허브 코드를 참조했습니다.
1. 마찬가지로 프로젝트를 생성합니다. 저는 gLogin 이라는 프로젝트로 만들었습니다.
2. Google Firebase Console 에 프로젝트를 등록합니다.
https://console.firebase.google.com/?hl=ko
안드로이드 SHA1 인증서 추출방법
Windows 환경
keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
Mac OS 환경
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
위 사진처럼 순서대로 등록을 해주시면 됩니다.
그러면 google-services.json 파일을 다운로드할 수 있는데요.
이 파일을 Project -> app 아래에 넣어주시면 됩니다.
이제 안드로이드 스튜디오로 갑니다.
1. build.gradle(Project:gLogin)
아래 코드 한줄을 추가해주세요.
dependencies {
classpath 'com.google.gms:google-services:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
2. build.gradle(Module:app) 에는
아래 4줄의 코드를 추가해주세요.
dependencies {
...
compile 'com.google.firebase:firebase-core:11.0.4'
compile 'com.google.firebase:firebase-auth:11.0.4'
compile 'com.google.android.gms:play-services-auth:11.0.4'...
}
apply plugin: 'com.google.gms.google-services'
3. strings.xml
<string name="sign_in">Sign In</string>
<string name="sign_out">Sign Out</string>
<string name="disconnect">Disconnect</string>
<string name="loading">loading\.\.\.</string>
4. activity_main.xml
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 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="match_parent"> <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="visible" tools:visibility="gone" /> <LinearLayout android:id="@+id/sign_out_and_disconnect" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="horizontal" android:paddingLeft="16dp" android:paddingRight="16dp" android:visibility="gone" tools:visibility="visible"> <Button android:id="@+id/sign_out_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/sign_out"/> <Button android:id="@+id/disconnect_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/disconnect"/> </LinearLayout> </RelativeLayout> </LinearLayout> | cs |
5. BaseActivity.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 | public class BaseActivity extends AppCompatActivity { @VisibleForTesting public ProgressDialog mProgressDialog; public void showProgressDialog() { if (mProgressDialog == null) { mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage(getString(R.string.loading)); mProgressDialog.setIndeterminate(true); } mProgressDialog.show(); } public void hideProgressDialog() { if (mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } } @Override public void onStop() { super.onStop(); hideProgressDialog(); } } | cs |
6. 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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | public class MainActivity extends BaseActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private static final String TAG = "MainActivity"; private static final int RC_SIGN_IN = 9001; // [START declare_auth] private FirebaseAuth mAuth; // [END declare_auth] private GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Views // Button listeners findViewById(R.id.sign_in_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); findViewById(R.id.disconnect_button).setOnClickListener(this); // [START config_signin] // Configure Google Sign In GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); // [END config_signin] mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); // [START initialize_auth] mAuth = FirebaseAuth.getInstance(); // [END initialize_auth] } // [START on_start_check_user] @Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); } // [END on_start_check_user] // [START onactivityresult] @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = result.getSignInAccount(); firebaseAuthWithGoogle(account); } else { // Google Sign In failed, update UI appropriately // [START_EXCLUDE] updateUI(null); // [END_EXCLUDE] } } } // [END onactivityresult] // [START auth_with_google] private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); // [START_EXCLUDE silent] showProgressDialog(); // [END_EXCLUDE] AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } // [START_EXCLUDE] hideProgressDialog(); // [END_EXCLUDE] } }); } // [END auth_with_google] // [START signin] private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } // [END signin] private void signOut() { // Firebase sign out mAuth.signOut(); // Google sign out Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { updateUI(null); } }); } private void revokeAccess() { // Firebase sign out mAuth.signOut(); // Google revoke access Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { updateUI(null); } }); } private void updateUI(FirebaseUser user) { hideProgressDialog(); if (user != null) { findViewById(R.id.sign_in_button).setVisibility(View.GONE); findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE); } else { findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE); } } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { // An unresolvable error has occurred and Google APIs (including Sign-In) will not // be available. Log.d(TAG, "onConnectionFailed:" + connectionResult); Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); } @Override public void onClick(View v) { int i = v.getId(); if (i == R.id.sign_in_button) { signIn(); } else if (i == R.id.sign_out_button) { signOut(); } else if (i == R.id.disconnect_button) { revokeAccess(); } } } | cs |
이상입니다.
순서대로 따라만 하신다면 구글 로그인 기능 가볍게 구현할 수 있습니다.
로그아웃은 mAuth.signOut(); 이 함수를 호출하면 됩니다.
'안드로이드' 카테고리의 다른 글
안드로이드 TextView, EditText 에 java 코드로 Bold 속성 주기! (0) | 2017.10.23 |
---|---|
안드로이드 BLE(Bluetooth Low Energy) Scanner 구현 => BluetoothAdapter, BluetoothLeScanner (48) | 2017.10.20 |
안드로이드 카카오계정 로그인 구현하기 android kakao login (0) | 2017.10.18 |
안드로이드 네이버 아이디 로그인 구현하기 android naver id login (0) | 2017.10.17 |
안드로이드 페이스북 로그인 기능 구현하기 android app facebook login (0) | 2017.10.17 |