4

iPhone 용 Facebook 응용 프로그램과 같은 iPhone 응용 프로그램이 있습니다. 내 응용 프로그램은 내 서버를 연결하고 모든 메시지를 정기적으로 2 시간마다 읽어야합니다. 모든 메시지를 읽을 수있는 스레드가 있지만 응용 프로그램이 종료되면 스레드가 작동하지 않습니다. 스레드가 주 대리자로부터 독립적으로 실행될 수 있습니까? 또는이 문제에 대한 해결책을 어떻게 찾을 수 있습니까?IOS 배경 작업

답변

6

앱이 백그라운드에서 물건을 처리하도록 할 수 없습니다. 사진 업로드와 같은 작업을 완료하는 API가 있지만 약 10 분 후에도 종료됩니다.

그러나 Apple Push Notification Service은 문제에 가장 적합한 해결책 인 것 같습니다. 서버는 새로운 일이 발생했다는 것을 장치에 알리고 사용자가 앱을 열 때 실제 메시지를 가져옵니다.

편집 : iOS 7부터 Apple은 백그라운드에서 데이터를 가져 오기 위해 실행중인 작업을 예약 할 수있는 기능을 구현했습니다. 이러한 작업은 특정 시간에 실행되지 않을 수도 있습니다. 아래의 release notes for iOS 7 및 링크 방법 참조 : 정기적으로 서버에 접속하여 컨텐츠를 업데이트

애플 리케이션을 수 시스템에 등록 및 배경에서 그 콘텐츠를 검색하기 위해 주기적으로 실행할 수. 등록하려면 UIBackgroundModes 키를 앱의 Info.plist 파일에있는 가져 오기 값과 함께 포함하십시오. 그런 다음 앱을 실행하면 setMinimumBackgroundFetchInterval: 메서드를 호출하여 업데이트 메시지 수신 빈도를 결정합니다. 마지막으로 대리인에 application:performFetchWithCompletionHandler: 메소드를 구현해야합니다.

+0

나는 똑같이 쓰려고했으나 @klaustopher가 처음이었다. iOS 개발자 구독이있는 경우 WWDC 비디오 또는 설명서를 볼 수 있습니다. 그들은 그것을 거기에서 아주 분명히 설명합니다. –

+0

NSNotification을 시도했지만 지정된 시간에 새 메시지가 없으면 NSNotification이 한 번 더 실행되지 않습니다. 귀하의 arshive 샘플 코드가 있으며 당신이 공유 할 수 있습니다. – BeyazBaron

+0

푸시 알림 서비스를 구현하는 방법에 대한 많은 예제가 있습니다. 서버 코드를 작성하는 경우 "apple push notification service {your language}"에 대해 google로 보내주십시오. 서버에 액세스 할 수없는 경우 서버에서 정기적으로 실행되는 일종의 프록시를 만들어야하며 원래 서버에서 정보를 가져와 사용자에게 정보를 보냅니다. – klaustopher

2

해결책이 없습니다.

Apple은 위치, 오디오 또는 VoIP 또는 새 테스트와 같은 특정 유형이 아닌 경우 응용 프로그램이 백그라운드에서 실행되는 것을 허용하지 않습니다. shouldBeginBackgroundTaskWithExpirationHandler를 사용하는 경우 응용 프로그램을 활성화 한 후 약 10 분 동안 계속 실행할 수 있습니다. .

해결 방법은 없지만 다른 많은 사람들이 이전과 동일한 방법을 사용하는 방법을 궁금해했지만 합법적 인 방법은 없습니다. 앱에서 정기적으로 어떤 종류의 호출 홈 작업을 예약 할 수 없습니다.

일시 중지되거나 종료 된 상태로 앱을 실행할 수있는 유일한 방법은 사용자가 명시 적으로 또는 로컬 알림 또는 원격 푸시 알림에 응답하여 앱을 시작하는 것입니다.