2017-04-21 5 views
1

iOS에서 배경을 감추는 데 문제가 있습니다. 먼저, 간략한 설명자를 보내 드리겠습니다.Xamarin.iOS로 iOS에서 백 그라운이션 (C#) : 어떤 방법을 사용해야합니까?

저는 유틸리티 찾기 티켓을 받고 배포 할 수있는 직장 관리 회사에서 일하고 있습니다. 사용자는 서버에서 티켓을 다운로드하고 서버에서 작업 한 내용을 서버로 다시 보낼 수 있습니다. 다운로드 된 티켓은 로컬 SQLite 데이터베이스에 저장되며 사용자가 작성한 응답은 로컬 SQLite 데이터베이스에 저장됩니다. 우리의 서버에서

  1. 다운로드 티켓을 로컬 SQLite 데이터베이스에 "티켓"
  2. 을 확인 : 내 동료는 표를 다운로드하고 다음과 같이 응답입니다 업로드 C# 및 자신의 지능형 프로세스 자 마린의 안드로이드 응용 프로그램을 작성 만든 응답이있는 경우
  3. 을 만든 응답이있는 경우 로컬 "응답"SQLite 데이터베이스는
  4. 기다립니다 오분 우리의 서버로 보내 볼 수
  5. 반복

사용자는 처음에 일괄 처리 티켓을 다운로드하여 처리 할 수 ​​있습니다. 사용자가 인터넷을 사용하지 않는 동안이 프로세스를 실행하면 아무 일도 일어나지 않으며 타이머가 재설정됩니다. 이 프로세스를 통해 사용자는 인터넷 없이도 티켓에 응답 할 수 있고 인터넷에 연결될 때마다 응답을 업로드하고 새 티켓을 다운로드 할 수 있습니다.

내 문제는 iOS에서 backgrounding이 Android보다 훨씬 제한적이라는 것입니다. 백그라운드 가져 오기가 있고 푸시 알림이 있습니다. 백그라운드 가져 오기를 사용하면 시스템에서 PerformFetch 메서드를 실행하는 데 "최적의 기회를 계산합니다"라는 메시지가 표시되며 필요한 5 분 타이머가 적절하지 않습니다. 푸시 알림을 사용하면 사용자가 인터넷을 사용하지 않으면 푸시 알림을받지 않습니다.

위에서 설명한대로 5 분 타이머를 설정하고 프로세스가 실행되면 새로운 티켓이 있는지 확인하고 새로운 티켓이 있으면 새로운 응답을 보내고 싶습니다. 하지만 iOS에서 역행하는 제한적인 특성으로 인해 그렇게 할 수 없습니다.

제안 사항? 그들은 감사 할 가치가 있습니다.

감사합니다.

답변

1

Android와 같은 iOS 앱에서 배경 서비스를 만들 수 없다는 것이 사실입니다. 그러나 요구 사항을 읽은 후에는 배경이 정말로 필요하지 않은 것처럼 보입니다. 모든 작업에 대해 서비스가 필요합니다. 사용자가 데이터를 오프라인으로 업데이트하고 응용 프로그램을 닫을 때만 필요합니다. 인터넷 연결이 다시 가능 해지면 다시 열지 마십시오. 하지만 그것은 iOS에 대한 제한 사항이며, iOS에서는이를 달성 할 수 없습니다.

다른 작업의 경우 앱이 활성화되면 서버에서 데이터를 비동기 적으로 가져올 수 있습니다.

5 분 타이머를 만들면 앱이 활성화 된 경우에만 실행됩니다. 그 시간에 비동기 모드에서 새 티켓을 가져오고 서버에 응답을 보내는 코드를 실행할 수 있습니다. Check here for more detail about how to do this in Xamarin.

이 프로세스는 비동기 적으로 일반 UI 작업을 방해하지 않습니다. 사용자는 인터넷 연결이있을 때마다 새 티켓 데이터베이스를 확인하고 데이터베이스의 응답을 업데이트 할 수 있습니다.