2017-02-27 5 views
0

서버와의 MQTT 연결이있는 곳에서 응용 프로그램을 만들고 서버가 장치 및 UI 변경과 관련된 일부 값을 적절하게 전송하고 있습니다. 그러나 앱이 백그라운드에있을 때 특정 값이 변경된다는 로컬 알림을 받아야합니다. 배경 서비스는 iOS에서 허용되지 않지만 iOS에서는이를 달성 할 수있는 방법이 없다는 것을 알고 싶습니다.iOS 백그라운드에서 서비스를 실행하여 로컬 알림을받는 방법은 무엇입니까?

UIApplication.shared.beginBackgroundTask으로 백그라운드에서 앱으로 로컬 알림을 성공적으로 추가했지만 사과가 앱을 종료 한 후 3 분 동안 만 작동합니다.

func registerBackgroundTask() { 
     backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in 
      self?.endBackgroundTask() 
     } 
     assert(backgroundTask != UIBackgroundTaskInvalid) 
    } 
    func endBackgroundTask() { 
     print("Background task ended.") 
     UIApplication.shared.endBackgroundTask(backgroundTask) 
     backgroundTask = UIBackgroundTaskInvalid 
    } 

그리고 단지 self.registerBackgroundTask()를 호출하는 세 분 동안 백그라운드에서 응용 프로그램이 실행 가능합니다.

다음으로 서비스를 실행하는 배경 가져 오기 및 위젯을 시도해 보겠습니다. 위의 두 가지 중 하나가 작동 할 수있는 몇 가지 제안을 원하십니까?

답변

0

"외부 액세서리와 통신"은 응용 프로그램에 적합한 배경 모드가됩니다. 참조를 위해 Apple Docs을 참조하십시오. 프로젝트의 Backround 모드를 활성화하고 값을 "external-accessory"로 설정해야합니다. 그런 다음 백그라운드에서 진행중인 작은 다운로드를 수행 할 수 있습니다. 애플은 심박 모니터를 예로 들었다.

지속적인 백그라운드 폴링은 에너지 낭비이며 배터리를 빨리 소모합니다. 응용 프로그램에 이것이 정말로 필요한지 확인하십시오. 사용자가 간헐적 인 알림/알람 만 필요로하는 경우 원격 알림 기능이 훨씬 더 좋은 솔루션입니다. 내 프로젝트에서 원격 알림을 사용하며 매우 원활하고 안정적으로 작동합니다. 추가 혜택은 이전에 사용자가 앱을 종료 한 경우에도 앱을 깨울 수 있다는 것입니다.

+0

실제로 있습니다. 서버와 MQTT의 소켓 연결이 생성되고 연결이 생성 된 후 서버가 디바이스 상태를 일정 시간마다 보냅니다. 위의 모드에서 백그라운드 모드에서 사과가 제공하는 방법을 모르겠습니다. –

+1

외부 액세서리가 외부 액세서리 프레임 워크를 지원해야합니다. . https://developer.apple.com/reference/externalaccessory를 참조하십시오. 일] MQTT 디 Y 이스에서는 이것이 가능하지 않습니다. iOS에서 해당 기기를 사용하려면 '외부 액세서리'로 설정하거나 원격 알림을 사용하여 iOS와 호환되도록 설정해야합니다. 디바이스를 변경할 수 없다면 MQTT를 수행하고 iOS/백그라운드 호환 트래픽으로 변환 할 사이에 작은 서버가 있어야합니다. – transistor

+0

설명해 주셔서 감사합니다. 내 팀 –

1

3 분 이상. 아무 모드 나 사용할 수 있습니다. 그렇지 않으면 앱이 백그라운드 앱에 입력됩니다. 3 분 후에 아무 조치도 취하지 않습니다. enter image description here

+0

하지만 위치 업데이트를 사용하고 있지 않다면이 문제가 발생합니까? –

+0

모드를 사용하지 않는 경우. 배경 응용 프로그램에서 3 분 후에 작동하지 않습니다. 애플은 앱이 백그라운드에서 몇 분 이상 계속 실행되는 것을 허용하지 않기 때문에. –

+0

예 알아요. 내가 어떤 모드도 사용하지 않는다면 애플은 앱이 백그라운드에서 계속 실행되는 것을 허용하지 않습니다. 그러나 여기에서 알고 싶은 것은 제 상황이 내가 사용할 수있는 모든 모드에 있다는 것입니까? –