다음을 통해 공유


Android 모바일 앱에 대해 오프라인 동기화 사용

개요

이 자습서에서는 Android용 Azure Mobile Apps의 오프라인 동기화 기능에 대해 설명합니다. 오프라인 동기화를 사용하면 최종 사용자가 네트워크 연결이 없는 경우에도 모바일 앱(데이터 보기, 추가 또는 수정)과 상호 작용할 수 있습니다. 변경 내용은 로컬 데이터베이스에 저장됩니다. 디바이스가 다시 온라인 상태가 되면 이러한 변경 내용이 원격 백 엔드와 동기화됩니다.

Azure Mobile Apps에 대한 첫 번째 환경인 경우 먼저 Android 앱 만들기 자습서를 완료해야 합니다. 다운로드한 빠른 시작 서버 프로젝트를 사용하지 않는 경우 프로젝트에 데이터 액세스 확장 패키지를 추가해야 합니다. 서버 확장 패키지에 대한 자세한 내용은 Azure Mobile Apps용 .NET 백 엔드 서버 SDK작업을 참조하세요.

오프라인 동기화 기능에 대한 자세한 내용은 Azure Mobile Apps 오프라인 데이터 동기화항목을 참조하세요.

오프라인 동기화를 지원하도록 앱 업데이트

오프라인 동기화를 사용하면 디바이스에서 SQLite 데이터베이스의 일부인 동기화 테이블(IMobileServiceSyncTable 인터페이스 사용)에서 읽고 씁니다.

디바이스와 Azure Mobile Services 간에 변경 내용을 푸시하고 끌어오려면 로컬 데이터베이스로 초기화하여 데이터를 로컬로 저장하는 동기화 컨텍스트 (MobileServiceClient.SyncContext)를 사용합니다.

  1. TodoActivity.java에서 mToDoTable의 기존 정의를 주석 처리하고, 동기화 테이블 버전의 주석 처리를 제거합니다.

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. 메서드에서 기존 onCreate 초기화에는 주석을 달고, 이 정의의 주석 처리를 제거하십시오.

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. refreshItemsFromTable에서 results의 정의를 주석 처리하고 이 정의의 주석 처리를 해제하십시오.

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. refreshItemsFromMobileServiceTable의 정의를 주석 처리합니다.

  5. refreshItemsFromMobileServiceTableSyncTable의 정의 주석을 제거합니다.

     private List<ToDoItem> refreshItemsFromMobileServiceTableSyncTable() throws ExecutionException, InterruptedException {
         //sync the data
         sync().get();
         Query query = QueryOperations.field("complete").
                 eq(val(false));
         return mToDoTable.read(query).get();
     }
    
  6. sync의 정의 주석을 제거합니다.

     private AsyncTask<Void, Void, Void> sync() {
         AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){
             @Override
             protected Void doInBackground(Void... params) {
                 try {
                     MobileServiceSyncContext syncContext = mClient.getSyncContext();
                     syncContext.push().get();
                     mToDoTable.pull(null).get();
                 } catch (final Exception e) {
                     createAndShowDialogFromTask(e, "Error");
                 }
                 return null;
             }
         };
         return runAsyncTask(task);
     }
    

앱 테스트

이 섹션에서는 WiFi를 켜고 동작을 테스트한 다음 WiFi를 해제하여 오프라인 시나리오를 만듭니다.

데이터 항목을 추가하면 로컬 SQLite 저장소에 보관되지만 새로 고침 단추를 누를 때까지 모바일 서비스와 동기화되지 않습니다. 다른 앱에는 데이터를 동기화해야 하는 시기에 대한 요구 사항이 다를 수 있지만 데모 목적으로 이 자습서에서는 사용자가 명시적으로 요청합니다.

해당 단추를 누르면 새 백그라운드 작업이 시작됩니다. 먼저 동기화 컨텍스트를 사용하여 로컬 저장소에 적용된 모든 변경 내용을 푸시한 다음, 변경된 모든 데이터를 Azure에서 로컬 테이블로 끌어온다.

오프라인 테스트

  1. 디바이스 또는 시뮬레이터를 비행기 모드배치합니다. 그러면 오프라인 시나리오가 만들어집니다.

  2. 일부 ToDo 항목을 추가하거나 일부 항목을 완료로 표시합니다. 디바이스 또는 시뮬레이터를 종료하거나 강제로 앱을 닫고 다시 시작합니다. 변경 내용이 로컬 SQLite 저장소에 있기 때문에 디바이스에서 유지되었는지 확인합니다.

  3. SQL Server Management Studio와 같은 SQL 도구 또는 Fiddler 또는 Postman과 같은 REST 클라이언트를 사용하여 Azure TodoItem 테이블의 내용을 봅니다. 새 항목이 서버에 동기화 되지 않은지 확인합니다.

    + For a Node.js backend, go to the [Azure portal](https://portal.azure.com/), and in your Mobile App backend click **Easy Tables** > **TodoItem** to view the contents of the `TodoItem` table.
    + For a .NET backend, view the table contents either with a SQL tool such as *SQL Server Management Studio*, or a REST client such as *Fiddler* or *Postman*.
    
  4. 디바이스 또는 시뮬레이터에서 WiFi를 켭니다. 그런 다음 새로 고침 단추를 누릅니다.

  5. Azure Portal에서 TodoItem 데이터를 다시 봅니다. 이제 새와 변경된 TodoItems가 표시됩니다.

추가 리소스