요즘은앱을 만들때 혼자 인 것은 만들기가 어렵습니다. 데이타와 연결이 되어야 된다는 이야기 입니다.
그럴때 유용하게 나오는 것이 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() {@Overridepublic 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 |