요즘은앱을 만들때 혼자 인 것은 만들기가 어렵습니다. 데이타와 연결이 되어야 된다는 이야기 입니다.
그럴때 유용하게 나오는 것이 BaaS 라는 것 입니다.
BaaS 는 'Backend as a Service'를 줄여 놓은 말인데, 백엔드 플랫폼을 서비스 형태로 지원해 주는것을 말합니다.
요즘인 구글의 firebase 가 이 부분에서 잘 만들어 놓은 거 같습니다.
firebase 는 성능이나 실행 면에서 뛰어 납니다.
json 으로 저장이 되면서 순간적으로 바뀌면 모든 기기에 전달이 됩니다. 같은 디비를 바라 보면서 말이죠
무척 빠른 속도를 자랑 하구 말입니다.
firebase 는 스트로지 공간도 있면 ssl 커녁션을 이용해서 모든 데이타가 전송 되면 로그인 시스템도 구글,트위터,페이스북,깃허브 등을
지원 합니다.
일단 100 개 동시 커넥션 까지 무료 입니다.
재미난 이야기를 적으면 되고 로그인 시스템도 있고 좋아요도 있습니다 이 모든걸 firebase 를 이용 해서 만들어 보겠습니다.
- 계정 생성 하기
- 이메일과 패스워드로 로그인
- 로그아웃
- 새로운 농담 쓰기
- 리스트뷰에 지은이와 투표 카운트 표시하기
- 재미난 농담에 투표 하기
이런식으로 해 보겟습니다.
먼저 firebase 사이트로 들어 갑니다.
구글이 인수 했다고 하네요
https://www.firebase.com/
로 들어 가시면 됩니다.
새 프로젝트 만들기를 눌러서 적당한 이름으로 만드시면 됩니다. 저는 myNote 라고 정했습니다.
저 프로젝트로 들어 가서 앱 추가를 누르면 google-service.json 파일이 생깁니다.
안드로이드 스튜디오로 가서 프로젝트로 펼쳐 보기 해서 app 폴더 밑에 저 파일을 위치 시키면 됩니다.
이제 다시 firebase 의 프로젝트로 들어 가시면 database 라는 항목이 나타납니다.
json 형태의 데이타 베이스 입니다.
{
"jokes" : {
"kjf": {
"jokeText" : "이런상황?"
}
}
}
이런 형태 라고 보시면 됩니다.
이메일 패스워드 형식의 로그인을 할려면 auth 영역에서 작업을 해 주셔야 합니다..
왼쪽의 auth 를 눌러서 email/password 방식을 사용 설정으로 바꾸어 주시면 됩니다.
이제 firebase 안드로이드 sdk 를 설치 해야 합니다.
build.gradle 파일을
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "yookn.kr.firebasesample"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.firebase:firebase-client-android:2.5.2'
compile 'com.google.firebase:firebase-auth:9.0.0'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.github.clans:fab:1.6.2'
}
apply plugin: 'com.google.gms.google-services'
이렇게 지정 해 주시면 됩니다.
빨간색 부분이 중요 포인트 입니다.
이제 sdk 를 이용 해 보겠습니다.
먼저 DataService.java 부터 만들어 보겠습니다.
DataService.java public class DataService { final static String BASE_URL = "https://<yourprojectid>.firebaseio.com"; final static Firebase _BASE_REF = new Firebase(BASE_URL); final static Firebase _USER_REF = new Firebase(BASE_URL + "/users/"); final static Firebase _JOKE_REF = new Firebase(BASE_URL + "/jokes/"); // private static 로 선언. private static DataService instance = new DataService(); private static MyPreferenceManager pref = MyApplication.getInstance().getPrefManager(); // 조회 method private static class Singleton { private static final DataService instance = new DataService(); } public static DataService getInstance () { System.out.println("create instance"); return Singleton.instance; } public static Firebase CURRENT_USER_REF() { String userID = pref.getValue(MyPreferenceManager.UID,""); //Firebase currentUserRef = new Firebase(DataService._USER_REF + "/" + pref.getValue(MyPreferenceManager.UID,"")); return _BASE_REF.child("users").child(userID); } public static void createNewJoke(HashMap<String, Object> joke) { Firebase firebaseNewJoke = _JOKE_REF.push(); firebaseNewJoke.setValue(joke); } }
_BASE_REF 가 기본 베이스 입니다.
_USER_REF 가 사용자 정보 , _JOKE_REF 가 농담 정보의 firebase url 입니다.
CURRENT_USER_REF 함수를 만들어서 현재 로그인한 사람의 정보를 얻어 올때 쓰여집니다.
LoginActivity.java
package yookn.kr.firebasesample; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import yookn.kr.firebasesample.app.MyApplication; public class LoginActivity extends AppCompatActivity { Button btnLogin,btnNewAccount,btnAddJoke; private FirebaseAuth mAuth; MyPreferenceManager pref; EditText txtEmailAdress,txtPassword,txtUserName,txtJoke ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); pref = MyApplication.getInstance().getPrefManager(); mAuth = FirebaseAuth.getInstance(); txtPassword = (EditText) findViewById(R.id.txtPassword); txtEmailAdress = (EditText) findViewById(R.id.txtEmailAdress); txtUserName = (EditText) findViewById(R.id.txtUserName); btnLogin = (Button) findViewById(R.id.btnLogin); btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FirebaseUser user = mAuth.getCurrentUser(); if (!pref.getValue(MyPreferenceManager.UID,"").equals("") && user != null) { //이미 로그인 되어져 있습니다. Toast.makeText(MyApplication.getInstance().getApplicationContext(), "로그인되어 있습니다.", Toast.LENGTH_SHORT).show(); return; } signIn(txtEmailAdress.getText().toString(),txtPassword.getText().toString()); } }); btnNewAccount = (Button) findViewById(R.id.btnNewAccount); btnNewAccount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("entrv","jokeText-1" ); // createUser(); //createAccount(txtEmailAdress.getText().toString(),txtPassword.getText().toString(),txtUserName.getText().toString()); Intent createAccountIntent = new Intent(MyApplication.getInstance().getApplicationContext(), CreateAccount.class); startActivity(createAccountIntent); } }); } private void signIn(String email, String password) { Log.d("entrv", "signIn:" + email); if (!validateForm()) { return; } MyApplication.getInstance().showProgressDialog(this); // [START sign_in_with_email] mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { Log.d("entrv", "signInWithEmail:onComplete:" + task.isSuccessful()); // [START_EXCLUDE] MyApplication.getInstance().hideProgressDialog(); // [END_EXCLUDE] // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) { Log.w("entrv", "signInWithEmail", task.getException()); onLoginFailed(); return; } new android.os.Handler().postDelayed( new Runnable() { public void run() { // On complete call either onSignupSuccess or onSignupFailed // depending on success onLoginSuccess(); } }, 1000); } }); // [END sign_in_with_email] } public void onLoginSuccess() { btnLogin.setEnabled(true); setResult(RESULT_OK, null); finish(); } public void onLoginFailed() { Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); btnLogin.setEnabled(true); } private boolean validateForm() { boolean valid = true; String email = txtEmailAdress.getText().toString(); if (TextUtils.isEmpty(email)) { txtEmailAdress.setError("Required."); valid = false; } else { txtEmailAdress.setError(null); } String password = txtPassword.getText().toString(); if (TextUtils.isEmpty(password)) { txtPassword.setError("Required."); valid = false; } else { txtPassword.setError(null); } return valid; } }
기본 문서에 나와 있는
Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.addAuthStateListener(new Firebase.AuthStateListener() {
@Override
public void onAuthStateChanged(AuthData authData) {
if (authData != null) {
// user is logged in
} else {
// user is not logged in
}
}
});
이 방식 으로는 성공이나 실패 아무것도 안 되었다.
그래서 firebaseauth 를 하나 만들고 이벤트 넘겨 줘서 로그인을 성고 시킬 수 있다.
'IT > 언어' 카테고리의 다른 글
php 애플(apple) sns 연동하기 (0) | 2023.06.05 |
---|---|
php 를 이용한 array 활용법 (0) | 2023.06.03 |
안드로이드 asynctask 정리 (0) | 2016.03.23 |
크롬에서 프레임으로 쌓여진 사이트 뒤로가기 버튼 새로고침 현상 일어 날때. (0) | 2016.03.16 |
안드로이드 앱 개발 - 모두의 웹하드 (0) | 2015.05.23 |