Xamarin.iOS 앱에 오프라인 데이터 동기화 추가

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

이 자습서를 시작하기 전에 적절한 백 엔드 서비스 만들기를 포함하는 Xamarin.iOS 빠른 시작 자습서를 완료해야 합니다.

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

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

온라인 작업에서는 .에서 IRemoteTable<T>읽고 씁니다. 오프라인 동기화를 사용하는 경우 대신 읽기 및 쓰기가 가능합니다 IOfflineTable<T> . 디바이스 IOfflineTable 내 SQLite 데이터베이스에서 지원되며 백 엔드 데이터베이스와 동기화됩니다.

Visual Studio에서:

  1. 솔루션을 마우스 오른쪽 단추로 TodoApp 클릭한 다음 솔루션용 NuGet 패키지 관리를 선택합니다.

  2. 새 탭에서 찾아보기를 선택한 다음 검색 상자에 Microsoft.Datasync.Client를 입력합니다.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Microsoft.Datasync.Client.SQLiteStore 패키지를 선택합니다.

  4. 오른쪽 창에서 프로젝트를 제외한 TodoAppService.NET6 모든 클라이언트 프로젝트를 선택합니다.

  5. 설치를 선택합니다.

  6. 메시지가 표시되면 사용권 계약에 동의합니다.

원격 서비스 클라이언트 업데이트

TodoApp.Data 프로젝트를 열고 디렉터리 내에서 클래스를 ServicesRemoteTodoService.cs 습니다. 다음과 같이 클래스를 업데이트합니다.

  1. 다음 using 문을 파일의 맨 위에 추가합니다.

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. 정의를 _table 다음으로 변경합니다.IOfflineTable<TodoItem>

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. 오프라인 데이터베이스 위치를 저장하기 위한 새 속성을 추가합니다.

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. 오프라인 데이터베이스를 InitializeAsync 정의하도록 메서드를 업데이트합니다.

    // Create the offline store definition
    var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString();
    var store = new OfflineSQLiteStore(connectionString);
    store.DefineTable<TodoItem>();
    var options = new DatasyncClientOptions
    {
        OfflineStore = store,
        HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() }
    };
    
    // Create the datasync client.
    _client = TokenRequestor == null 
        ? new DatasyncClient(Constants.ServiceUri, options)
        : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options);
    
    // Initialize the database
    await _client.InitializeOfflineStoreAsync();
    
    // Get a reference to the offline table.
    _table = _client.GetOfflineTable<TodoItem>();
    
    // Set _initialized to true to prevent duplication of locking.
    _initialized = true;
    
  5. RefreshItemsAsync() 오프라인 동기화를 수행하도록 업데이트합니다.

    /// <summary>
    /// Refreshes the TodoItems list manually.
    /// </summary>
    /// <returns>A task that completes when the refresh is done.</returns>
    public async Task RefreshItemsAsync()
    {
        await InitializeAsync();
    
        // First, push all the items in the table.
        await _table.PushItemsAsync();
    
        // Then, pull all the items in the table.
        await _table.PullItemsAsync();
    
        return;
    }
    

오프라인 데이터베이스 위치 설정

TodoApp.iOS 프로젝트에서 파일을 편집합니다ViewControllers\HomeViewController.cs. 다음과 같이 생성자의 정의를 RemoteTodoService 변경합니다.

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

인증 자습서완료하지 않은 경우 정의는 다음과 같이 표시됩니다.

TodoService = new RemoteTodoService()
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

앱 테스트

앱은 새로 고침 아이콘을 누를 때까지 백 엔드와 동기화되지 않습니다. 테스트하려면 다음을 수행합니다.

  1. Azure Portal을 엽니다.

  2. 빠른 시작에 대한 리소스가 포함된 리소스 그룹을 엽니다.

  3. 데이터베이스를 quickstart 선택합니다.

  4. 쿼리 편집기 (미리 보기)를 선택합니다.

  5. 데이터베이스에 대해 설정한 것과 동일한 자격 증명을 사용하여 SQL Server 인증으로 로그인합니다.

    • 필요한 경우 IP 주소에 대한 액세스를 허용하라는 메시지가 표시됩니다. 링크를 선택하여 허용 목록을 업데이트한 다음 확인을 눌러 로그인을 다시 시도합니다.
  6. 쿼리 편집기에서 SELECT * FROM [dbo].[TodoItems]를 입력합니다. 그런 다음, 실행을 선택합니다.

현재 TodoItems 목록이 표시됩니다.

Screenshot of the results in the S Q L query editor.

이제 앱을 통해 몇 가지 사항을 변경합니다. 새로 고침 을 누르지 마세요(아직).

Azure Portal에서 SQL 문을 반복하고 데이터베이스의 데이터가 변경되지 않은지 확인합니다.

앱에서 새로 고침 아이콘을 선택하여 큐의 데이터를 백 엔드 서비스로 푸시합니다. 출력 디버그 창에서 HTTP 트랜잭션이 발생하는 것을 볼 수 있습니다.

Azure Portal에서 SQL 문을 반복하고 변경 내용이 원격 서비스에 푸시되었는지 확인합니다.

리소스 정리

다른 빠른 시작 자습서를 수행하지 않는 한 지금 백 엔드 서비스와 연결된 리소스를 삭제할 수 있습니다.

  1. Azure Portal을 엽니다.
  2. 빠른 시작 리소스를 보유하는 리소스 그룹을 선택합니다.
  3. 리소스 그룹 삭제를 선택합니다.
  4. 지침에 따라 삭제를 확인합니다.

Azure CLI를 사용할 수도 있습니다.

az group delete -g quickstart

Azure Developer CLI를 사용하여 리소스를 배포한 경우 대신 명령을 사용할 azd down 수 있습니다.

삭제를 완료하는 데 몇 분 정도 걸립니다.

다음 단계