Android 앱과 웹 서버 간의 데이터 동기화
Android 앱과 서버 간에 데이터(예: DB 레코드, 미디어)를 동기화하려고 합니다.,를 보신 분들은Evernote
또는 이와 유사한 애플리케이션을 사용하면 제 말의 의미를 확실히 이해할 수 있습니다.
몇 가지 질문이 있습니다(DB 레코드를 동기화하고 싶다고 생각해 보십시오).
을 위한 있습니다(예: 모든사용자는예위가있일지습고다니부를공의간서버한신:
Evernote
또는Dropbox
. 아마도 사용자는 핸드폰으로 새로운 레코드를 만들고 서버에서 새로운 레코드를 만들 것입니다.어떻게 이 기록들을 함께 일치시킬 수 있습니까?동일한 ID의 기록이 있다면 어떤 알고리즘을 제안하시겠습니까?JSON을 제외하고 휴대폰 기기와 서버 간에 데이터를 전송할 수 있는 방법이 있습니까?
SyncAdapter 및 ContentProvider가 제 문제를 해결할 수 있다면 정확하게 설명해 주십시오. (샘플이나 튜토리얼을 저에게 제공하거나 제 검색 범위를 넓히고 안내하는 데 도움이 되는 조언이나 키워드를 제공해 주시면 감사하겠습니다.)
다음과 같은 더 큰 질문을 통해 귀하의 모든 질문에 답변하도록 노력하겠습니다.웹 서버와 안드로이드 앱 간에 데이터를 동기화하려면 어떻게 해야 합니까?
웹 서버와 Android 앱 간에 데이터를 동기화하려면 Android 장치에 몇 가지 다른 구성 요소가 필요합니다.
영구 스토리지:
이것은 전화기가 실제로 웹 서버로부터 수신하는 데이터를 저장하는 방법입니다.이를 위해 가능한 한 가지 방법은 SQLite 데이터베이스를 기반으로 하는 사용자 정의 컨텐츠 공급자를 작성하는 것입니다.컨텐츠 공급자를 위한 적절한 튜토리얼은 http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/ 에서 찾을 수 있습니다.
콘텐츠 공급자는 저장된 데이터와 상호 작용할 일관된 인터페이스를 정의합니다.또한 원하는 경우 다른 응용프로그램이 사용자의 데이터와 상호 작용할 수 있습니다.컨텐츠 공급자 뒤에는 SQLite 데이터베이스, 캐시 또는 임의 스토리지 메커니즘이 있을 수 있습니다.
SQLite 데이터베이스와 함께 ContentProvider를 사용하는 것이 좋으나 원하는 Java 기반 스토리지 메커니즘을 사용할 수 있습니다.
데이터 교환 형식:
웹 서버와 안드로이드 앱 간에 데이터를 보내는 데 사용하는 형식입니다.요즘 가장 많이 사용되는 두 가지 형식은 XML과 JSON입니다.형식을 선택할 때 사용할 수 있는 직렬화 라이브러리의 종류를 고려해야 합니다.저는 즉시 gson: https://github.com/google/gson, 이라는 json 직렬화를 위한 환상적인 라이브러리가 있다는 것을 알고 있지만 XML을 위한 유사한 라이브러리가 존재한다고 확신합니다.
동기화 서비스
서버에서 새 데이터를 가져오고 서버의 내용을 반영하도록 모바일 콘텐츠를 새로 고칠 수 있는 일종의 비동기 작업이 필요합니다.또한 내용을 로컬로 변경할 때마다 서버에 통지하고 변경사항을 반영할 수 있습니다.Android는 SyncAdapter 패턴을 쉽게 해결할 수 있는 방법으로 제공합니다.사용자 계정을 등록해야 합니다. 그러면 Android가 많은 마법을 수행하여 자동으로 동기화할 수 있습니다.다음은 좋은 튜토리얼입니다: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/
레코드가 동일한지 확인하는 방법은 일반적으로 Android 장치와 서버에 모두 저장하는 고유한 ID의 항목을 만듭니다.이를 사용하여 동일한 참조를 참조하는지 확인할 수 있습니다.또한 "update_at"과 같은 열 속성을 저장하여 항상 최신 데이터를 얻거나 새로 작성된 데이터를 실수로 덮어쓰지 않도록 할 수 있습니다.
우리가 오늘을 생각해보면, 받아들여진 대답은 너무 오래되었습니다.이러한 유형의 응용프로그램을 만드는 데 도움이 될 수 있는 새로운 라이브러리가 많이 있습니다.
여러분은 여러분에게 확실히 도움이 될 다음 주제들을 배워야 합니다.
동기화 어댑터:앱의 동기화 어댑터 구성 요소는 장치와 서버 간에 데이터를 전송하는 작업의 코드를 캡슐화합니다.앱에서 제공한 스케줄링 및 트리거에 따라 동기화 어댑터 프레임워크는 동기화 어댑터 구성 요소에서 코드를 실행합니다.
영역: 영역은 SQLite 및 Core Data를 대체하는 모바일 데이터베이스입니다.
Android 및 Java용 Retrofit Type-safe HTTP 클라이언트 by Square, Inc.스마트하게 사용할 수 있는 개조 방법을 배워야 합니다.
데이터베이스에 대한 동기화 로직은 다음과 같습니다.Android 전화기의 SQLite 데이터베이스를 서버의 MySQL 데이터베이스와 동기화하는 방법은 무엇입니까?
모든 새로운 학습자에게 행운을 빕니다.:)
이 문서를 직접 작성하는 경우 다음 사항을 유념해야 합니다.
장치와 동기화 서버 간의 올바른 인증
장치와 서버 간의 동기화 프로토콜입니다.일반적으로 인증, 데이터 교환, 상태 교환(어떤 작업이 작동하고 어떤 작업이 실패했는지)의 3단계로 진행됩니다.
페이로드 형식을 선택합니다.실제 데이터를 나타내기 위해 SyncML 기반 XML과 JSON 기반 형식을 혼합하는 것을 제안합니다.프로토콜의 경우 SyncML, 교환되는 실제 데이터의 경우 JSON입니다.JSON Array를 사용하면 데이터에 쉽게 액세스할 수 있으므로 데이터를 조작하는 동안 JSON Array를 사용하는 것이 항상 선호됩니다.
클라이언트와 서버 모두에서 데이터 변경사항을 추적합니다.동기화 세션 중에 변경되는 ID의 변경 로그를 유지 관리할 수 있습니다.또한 개체가 성공적으로 동기화되면 변경 로그를 지웁니다.또한 부울 변수를 사용하여 동기화 상태(예: 마지막 동기화 시간)를 확인할 수 있습니다.최종 사용자는 마지막 동기화가 완료된 시간을 식별하는 데 도움이 됩니다.
서버에서 데이터가 변경될 때 동기화 세션을 시작하려면 서버에서 장치로 통신할 수 있는 방법이 필요합니다.C2DM을 사용하거나 고유한 영구 tcp 기반 통신을 작성할 수 있습니다.tcp 접근 방식은 매우 원활합니다.
여러 장치에 걸쳐 데이터 변경 사항을 복제하는 방법
마지막으로 충돌을 감지하고 처리하는 방법입니다.
이것이 좋은 출발점이 되기를 바랍니다.
@그랜티스모는 전반적으로 훌륭한 설명을 제공합니다.사람들이 실제로 이런 일을 하고 있는지 알고 싶다면 구글이 2014년 구글 IO 앱을 어떻게 했는지 살펴보라고 제안합니다(그들이 출시하는 앱의 소스 코드를 항상 깊이 살펴볼 가치가 있습니다).거기서 배울 것이 많습니다).
여기 그것에 대한 블로그 게시물이 있습니다: http://android-developers.blogspot.com.br/2014/09/conference-data-sync-gcm-google-io.html
기본적으로 애플리케이션 측면에서는 신호 전달을 위한 GCM, 컨텐츠 공급자와의 데이터 가져오기 및 대화를 위한 동기화 어댑터를 사용하여 지속적으로 작업을 수행합니다(예, 애플리케이션의 다른 부분에서 DB가 직접 액세스하지 못하도록 차단합니다)
또한, 2015년 코드를 보고 싶다면, https://github.com/google/iosched .
예를 들어, 테이블을 동기화하려는 경우todoTable
부터MySql
로.Sqlite
먼저 하나의 열 이름을 만듭니다.version (type INT)
에todoTable
둘 다를 위하여Sqlite
그리고.MySql
둘째, 테이블 이름을 만듭니다.database_version
한 열 이름으로currentVersion(INT)
인MySql
새 항목을 에 추가할 때todoTable
또는 업데이트 항목의 경우 이 항목의 버전을 +1로 업그레이드해야 합니다.currentVersion
인Android
동기화를 원하는 경우(수동으로 동기화 버튼을 누르거나 서비스를 기간별로 실행):
다음과 함께 요청을 전송합니다.Sqlite
서버에 현재 버전(현재는 1)입니다.
그런 다음 서버에서 다음 항목을 찾습니다.MySql
버전 값이 다음보다 큽니다.Sqlite
currentVersion(1) 다음 Android에 대한 응답(이 예에서는 버전 2가 있는 항목 3이 Android에 대한 응답)
인SQLite
다음에 새 항목을 추가하거나 업데이트합니다.todoTable
현재 버전을 업그레이드합니다.
parseplatform.org 을 보세요. 그것은 오픈 소스 프로젝트입니다.
(또한 back4app.com 에서 제공되는 상용 패키지를 이용할 수 있습니다.)
이것은 매우 간단하고 사용자 친화적인 서버 측 데이터베이스 서비스로 훌륭한 안드로이드 클라이언트 측 API를 제공합니다.
데이터를 대기하는 서버 측 응용 프로그램을 사용하는 것이 이를 달성하는 한 가지 방법입니다.데이터는 다음을 사용하여 전송할 수 있습니다.HttpRequest
자바로 된 객체 또는 당신 자신의 것을 쓸 수 있습니다.TCP/IP
데이터 전송 유틸리티다음을 사용하여 데이터를 전송할 수 있습니다.JSON
형식 또는 적합하다고 생각되는 다른 형식.또한 중요한 정보가 포함된 경우 데이터를 서버로 전송하기 전에 암호화할 수 있습니다.서버 애플리케이션이 해야 할 일은 단지 기다리는 것뿐입니다.HttpRequests
데이터를 분석하여 원하는 곳에 저장할 수 있습니다.
저는 헤시안과 유사한 바이너리 웹 서비스 프로토콜을 사용할 것을 제안합니다.이것은 매우 잘 작동하며 안드로이드 구현이 있습니다.약간 무거울 수 있지만 빌드하는 응용 프로그램에 따라 다릅니다.이게 도움이 되길 바랍니다.
@Grantismo는 Android 동기화 구성 요소에 대한 개요를 제공합니다.
SyncManagerAndroid 라이브러리는 Android Sync 프레임워크에 연결할 수 있는 간단한 양방향 동기화 구현(Abstract)을 제공합니다.스레드 동기화 어댑터.OnPerformSync).
https://github.com/sschendel/SyncManagerAndroid
언급URL : https://stackoverflow.com/questions/10829371/sync-data-between-android-app-and-webserver
'sourcecode' 카테고리의 다른 글
고유한 제약 조건을 위반하지 않고 MySQL에서 두 행의 값을 교환하는 방법은 무엇입니까? (0) | 2023.08.02 |
---|---|
Android 디자인 지원 라이브러리 확장 가능 부동 액션 버튼(FAB) 메뉴 (0) | 2023.08.02 |
타임스탬프가 지정된 이벤트 일치 오류: 일치 요소를 찾지 못했습니다. (0) | 2023.08.02 |
jQuery에서 null 객체를 확인하는 방법 (0) | 2023.08.02 |
express.json()과 express.urlenced()는 무엇입니까? (0) | 2023.08.02 |