어플리케이션에서 실시간으로 서버 유지 관리 방법 전달

TL;DR


응용 프로그램은 아무 것도 나쁘지 않지만 서버 고장으로 댓글이 갑자기 떨어졌어요. 30분 정도 개발하면 막을 수 있으니까 설치해야 돼요.

응용 프로그램은 괜찮지만 평가가 떨어지고 힘들 때


아무리 완벽하고 빈틈이 없는 설치 프로그램이라도 통신 대상인 서버에서 문제가 발생하면 프로그램을 사용할 수 없다.
이때 읽는 중이거나 오류가 발생했다고 계속 표시되면 사용자에게는 프로그램 자체가 고장난 것과 같다."어렵게 설치했는데 고장이 나서 사용할 수 없다"고 하니 댓글란은 거칠어질 수밖에 없다.
다른 한편, 고장이 났을 때 시작된 응용 프로그램에서 맞지 않습니다. 지금 방법을 생각하고 있습니다!이렇게 되면 사용자도 갑자기 화를 내지 않을 것이다.
이 문장에서
  • 서비스 공급업체의 메시지
  • 사용자에게 실시간 구현
  • 가능한 한 간단하게 실현
  • 사용자 정의 모양새를 정의합니다.
    이번에 구글이 2014년 인수한 Firebase 실시간 백엔드 서비스를 사용한다.다음은 Andoroid로 설명했으며iOS도 CocoaPods에서 쉽게 가져옵니다. 똑같이 제작하고 공동화할 수 있다.

    어떤 느낌?


    "아뿔싸, 서버가 멈췄어..."
    이런 긴급한 상황에서도 인터넷에서 상태를 업데이트함으로써 사용자에게 실시간으로 상황을 전달할 수 있다.
  • 실행 상태(active)가 false로 바뀌면 프로그램에 지정한 메시지를 표시하는 Snackbar로 프로그램의 사용자에게 문제가 발생했음을 알려줍니다.
  • 복구 상황에 따라 재작성 시 실시간으로 반영
  • 이 설치 주체는 여러 가지 포함 61행 120행 정도라고 쓰여 있고 액티비티에 이런 느낌을 주는 리셋 이벤트 구현만 있으면 설치할 수 있다.다만 유지 보수 중 응용 프로그램을 시작할 때나 통신이 끊기거나 부활할 때도 자동으로 재연결이 되는 등 여러 가지 상황에서 정상적으로 작동할 수 있다.(Firebase 잘한다)
    저장소 위치: 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.gradle
    compile 'com.firebase:firebase-client-android:2.3.1'
    
    AndroidManifest.xml
    <uses-permission android:name="android.permission.INTERNET" />
    
    또한 라이브러리의 파일이 중복되어 구축이 작아지기 때문에 다음 설정을 app/build.gradle 에 수동으로 추가합니다.
    app/build.gradle
    android {
        // ...
        // 諸々の設定のあと
        // ...
    
        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();
        }
    }
    
    다 됐어요마지막 설치는 여기 있습니다..

    총결산


    작은 구조지만 긴급한 상황에서는 매우 유용하다.기능 추가의 예로
  • 알림 페이지에 URL 추가
  • 애플리케이션 버전 및 OS 버전에 따라 구분
  • Firebase의 REST API를 두드려 Slack에서 업데이트된 구조 만들기
  • 잠깐만.
    참고로 Firebase는 100을 동시에 연결하기 전에는 무료이지만, 그 이상의 연결 수를 처리하기 위해서는 매달 25달러의 사용료가 필요합니다.하지만 이렇게 접속수에 제한이 없기 때문에 업무용으로 앱을 사용하면 서버비를 감안하면 충분히 돈을 받을 수 있을 것 같습니다.물론 일반적으로 백엔드로 사용하기도 편리하다.

    보충하여 기록하다


    나는 실기로 만들어 보았다. 현재 위의gif처럼 10초에 한 번씩 유지보수나 문제를 해결하는bot을 실행합니다.실제로 작동 후의 동작을 손으로 보거나 예의 모드에서 실제 통신을 끊을 때의 동작을 시도할 수 있다.

    좋은 웹페이지 즐겨찾기