어플리케이션에서 실시간으로 서버 유지 관리 방법 전달
TL;DR
응용 프로그램은 아무 것도 나쁘지 않지만 서버 고장으로 댓글이 갑자기 떨어졌어요. 30분 정도 개발하면 막을 수 있으니까 설치해야 돼요.
응용 프로그램은 괜찮지만 평가가 떨어지고 힘들 때
아무리 완벽하고 빈틈이 없는 설치 프로그램이라도 통신 대상인 서버에서 문제가 발생하면 프로그램을 사용할 수 없다.
이때 읽는 중이거나 오류가 발생했다고 계속 표시되면 사용자에게는 프로그램 자체가 고장난 것과 같다."어렵게 설치했는데 고장이 나서 사용할 수 없다"고 하니 댓글란은 거칠어질 수밖에 없다.
다른 한편, 고장이 났을 때 시작된 응용 프로그램에서 맞지 않습니다. 지금 방법을 생각하고 있습니다!이렇게 되면 사용자도 갑자기 화를 내지 않을 것이다.
이 문장에서
아무리 완벽하고 빈틈이 없는 설치 프로그램이라도 통신 대상인 서버에서 문제가 발생하면 프로그램을 사용할 수 없다.
이때 읽는 중이거나 오류가 발생했다고 계속 표시되면 사용자에게는 프로그램 자체가 고장난 것과 같다."어렵게 설치했는데 고장이 나서 사용할 수 없다"고 하니 댓글란은 거칠어질 수밖에 없다.
다른 한편, 고장이 났을 때 시작된 응용 프로그램에서 맞지 않습니다. 지금 방법을 생각하고 있습니다!이렇게 되면 사용자도 갑자기 화를 내지 않을 것이다.
이 문장에서
이번에 구글이 2014년 인수한 Firebase 실시간 백엔드 서비스를 사용한다.다음은 Andoroid로 설명했으며iOS도 CocoaPods에서 쉽게 가져옵니다. 똑같이 제작하고 공동화할 수 있다.
어떤 느낌?
"아뿔싸, 서버가 멈췄어..."
이런 긴급한 상황에서도 인터넷에서 상태를 업데이트함으로써 사용자에게 실시간으로 상황을 전달할 수 있다.
false
로 바뀌면 프로그램에 지정한 메시지를 표시하는 Snackbar로 프로그램의 사용자에게 문제가 발생했음을 알려줍니다.저장소 위치: https://github.com/tnj/FirebaseMaintenanceMode
제작 방법
우선 Android Studio에서 평소Blank Activity
프로젝트를 만듭니다.
Android Studio에서 항목에 Firebase 추가
Command + ; (Windows의 경우 Ctrl + Alt + Shift + S)로 Project Structure를 열고 Cloud를 연 후 Firebase 확인란이 있으므로 확인란을 선택한 후 OK 를 누릅니다.
다음 행이 추가됩니다.
app/build.gradlecompile 'com.firebase:firebase-client-android:2.3.1'
AndroidManifest.xml<uses-permission android:name="android.permission.INTERNET" />
또한 라이브러리의 파일이 중복되어 구축이 작아지기 때문에 다음 설정을 app/build.gradle
에 수동으로 추가합니다.
app/build.gradleandroid {
// ...
// 諸々の設定のあと
// ...
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
}
Firebase 계정 만들기
그리고 사이트 설명 오른쪽 상단의 서명 방향에서 계정을 만듭니다.구글 계정만 선택하면 돼.
서명할 수 있다면 My First App이라는 최초의 응용 프로그램은 이미 만들어졌다.
제작 데이터
y First App의 Manage App을 열면 데이터의 편집 화면이 됩니다.
Firebase는 기본적으로 JSON 라이센스 트리로 데이터를 저장합니다.
이번에는 status
라는 이름으로'서비스가 살아있는지active
','죽을 때 표시되는 정보message
'두 가지를 관건으로 데이터를 만들었다.
커서를 모 요소 (자동 생성) 에 놓으면 + 태그가 나타나므로 해당 태그를 클릭합니다.
name
에 입력status
하면 즉시 값이 아닌 하위 요소를 추가하기 위해 value
를 비워 두고 오른쪽 + 를 누릅니다.
첫 번째 하위 요소는name:active
,value:true
이고 Add를 누르십시오.
여기까지의 내용을 제출하다.
status
에 요소를 추가하려면 마우스 커서를 오른쪽으로 이동하고 +를 누릅니다.
name:message
,value:""
를 입력하고 Add를 누릅니다.
결국 그래야지.
JSON으로 표현하면 이렇게 간단한 데이터입니다.{
"status": {
"active": true,
"message": ""
}
}
이렇게 하면 데이터가 준비된다.
보안 및 규칙 설정
Firebase는 Security & Rules에서 JSON 형식으로 읽기와 쓰기 권한 및 검증 규칙을 설정합니다.
이번status는 누구나 읽을 수 있으며 인증된 사람만 쓸 수 있기 때문에 다음과 같이 설정합니다.{
"rules": {
"status": {
".read": true,
".write": "auth != null"
}
}
}
자세한 내용은 보안 문서 을 참조하십시오.
응용 프로그램 측 설치
먼저 Firebase를 Application#onCreate()
로 초기화합니다.Firebase.setAndroidContext(this);
다음은 방금 정의된 status
POJO 객체를 받을 예정입니다.옵션, @IgnoreJsonProperties
메모는 나중에 키프레임을 추가하는 동안 오류를 방지합니다.@JsonIgnoreProperties(ignoreUnknown = true)
public class Status {
private boolean active;
private String message;
public Status() {
}
public boolean isActive() {
return active;
}
public String getMessage() {
return message;
}
}
다음은 실제로 받아들인 부분을 적으세요.Firebase에서 데이터의 수신은 항상 비동기적으로 리셋을 통해 진행된다.Firebase statusRef = new Firebase(FIREBASE_ROOT);
statusRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Status status = dataSnapshot.getValue(Status.class);
// ここで通知のブロードキャストを投げる
}
@Override
public void onCancelled(FirebaseError firebaseError) {
// エラー時の処理、今回は特に何もしない
}
});
FIREBASE_ROOT
Firebase의 데이터 URL을 작성합니다.이전 데이터 편집 화면에서 status
를 클릭하여 (status가 루트가 됨) 상태의 브라우저 주소 표시줄에 표시된 URL 자체입니다.이번 상황은 아래의 주소입니다.https://fiery-inferno-8489.firebaseio.com/status
이번 응용 프로그램의 유지보수 정보는 전체 응용 프로그램에 반영해야 하는 정보이기 때문에 이 처리는 Application#onCreate()
시기에도 불린다.Activity 등은 브로드캐스트 이벤트를 수신하여 화면에 반영합니다.예시에서 방송은 이벤트 알림에서 실시하기 쉽다otto를 사용했지만 로컬 방송 관리자도 문제가 없었다.
그리고 수용자의 활동자의 실현을 쓴다.@Override
protected void onResume() {
super.onResume();
// イベントリスナを登録
MaintenanceMode.bus().register(this);
}
@Override
protected void onPause() {
super.onPause();
// イベントリスナの登録解除
MaintenanceMode.bus().unregister(this);
}
@Produce
public MaintenanceMode.Status getCurrentMaintenanceMode() {
// 起動直後に呼び出される処理。現在知りうる最新のデータを返す。
return MaintenanceMode.current();
}
@Subscribe
public void maintenanceModeChanged(MaintenanceMode.Status status) {
// statusに変更があった場合に呼び出されるのでSnackbarを表示/非表示にする
if (!status.isActive()) {
bar = Snackbar.make(findViewById(R.id.coordinatorLayout), status.getMessage(), Snackbar.LENGTH_INDEFINITE);
bar.show();
} else if (bar != null && bar.isShown()) {
bar.dismiss();
}
}
다 됐어요마지막 설치는 여기 있습니다..
총결산
작은 구조지만 긴급한 상황에서는 매우 유용하다.기능 추가의 예로
compile 'com.firebase:firebase-client-android:2.3.1'
<uses-permission android:name="android.permission.INTERNET" />
android {
// ...
// 諸々の設定のあと
// ...
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
}
{
"status": {
"active": true,
"message": ""
}
}
{
"rules": {
"status": {
".read": true,
".write": "auth != null"
}
}
}
Firebase.setAndroidContext(this);
@JsonIgnoreProperties(ignoreUnknown = true)
public class Status {
private boolean active;
private String message;
public Status() {
}
public boolean isActive() {
return active;
}
public String getMessage() {
return message;
}
}
Firebase statusRef = new Firebase(FIREBASE_ROOT);
statusRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Status status = dataSnapshot.getValue(Status.class);
// ここで通知のブロードキャストを投げる
}
@Override
public void onCancelled(FirebaseError firebaseError) {
// エラー時の処理、今回は特に何もしない
}
});
https://fiery-inferno-8489.firebaseio.com/status
@Override
protected void onResume() {
super.onResume();
// イベントリスナを登録
MaintenanceMode.bus().register(this);
}
@Override
protected void onPause() {
super.onPause();
// イベントリスナの登録解除
MaintenanceMode.bus().unregister(this);
}
@Produce
public MaintenanceMode.Status getCurrentMaintenanceMode() {
// 起動直後に呼び出される処理。現在知りうる最新のデータを返す。
return MaintenanceMode.current();
}
@Subscribe
public void maintenanceModeChanged(MaintenanceMode.Status status) {
// statusに変更があった場合に呼び出されるのでSnackbarを表示/非表示にする
if (!status.isActive()) {
bar = Snackbar.make(findViewById(R.id.coordinatorLayout), status.getMessage(), Snackbar.LENGTH_INDEFINITE);
bar.show();
} else if (bar != null && bar.isShown()) {
bar.dismiss();
}
}
작은 구조지만 긴급한 상황에서는 매우 유용하다.기능 추가의 예로
참고로 Firebase는 100을 동시에 연결하기 전에는 무료이지만, 그 이상의 연결 수를 처리하기 위해서는 매달 25달러의 사용료가 필요합니다.하지만 이렇게 접속수에 제한이 없기 때문에 업무용으로 앱을 사용하면 서버비를 감안하면 충분히 돈을 받을 수 있을 것 같습니다.물론 일반적으로 백엔드로 사용하기도 편리하다.
보충하여 기록하다
나는 실기로 만들어 보았다. 현재 위의gif처럼 10초에 한 번씩 유지보수나 문제를 해결하는bot을 실행합니다.실제로 작동 후의 동작을 손으로 보거나 예의 모드에서 실제 통신을 끊을 때의 동작을 시도할 수 있다.
Reference
이 문제에 관하여(어플리케이션에서 실시간으로 서버 유지 관리 방법 전달), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tnj/items/c38d0e0ba6f10601b3b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)