2016-09-23 3 views
0

화면이 꺼져 있거나 앱이 백그라운드에서 실행 중일 때도 앱이 푸시 알림을받을 때마다 iOS 사용자의 위치를 ​​캡처하고 싶습니다. 위치를 고정밀 도로 인식하고 알림이 전달되는 즉시 캡처하는 것이 중요합니다. (나는 그 위치를 배경으로 서버에 다시 게시하고 싶습니다.)푸시 알림에 의해 백그라운드에서 iOS 위치를 캡처하려면 어떻게해야하나요?

iOS에서이 작업을 수행 할 수 있습니까? 저는 플랫폼을 처음 접했고 적어도 부분 인이 가능하다는 것을 나타내는 많은 혼란스러운 정보를 보았습니다. 그러나 전체적인 것이 확실하지는 않습니다. 또한 일부 리소스 (예 : iOS App Background Location (Push Notifications))를 찾았지만 4 년 전이었고 최근 iOS 출시로 인해 많은 변화가있었습니다.

+0

해결책은 백그라운드에서 위치 데이터를 계속 가져 와서 알림을 사용하는 것입니다. 백그라운드에서 위치를 계속 가져 오려면 http://stackoverflow.com/a/24666487/548403 –

답변

0

가능합니다. AppDelegate didFinishLaunchingWithOptions에서 알림 (백그라운드에서 수신 된 APN)에서 시작되었는지 확인한 다음 위치 서비스를 시작합니다. 위치를 받으면 백엔드로 보내고 위치 서비스를 종료하십시오. 일반에서 시스템이 위치를 반환하기 전에 약간의 지연이있을 것이라는 점에 유의하십시오. 그러나 앱이 다시 잠자기 전에 경과 한 시간은 시간에 이루어져야합니다. 필요한 경우 배경을 추가로 얻는 방법이 몇 가지 있습니다 (예 : ).

// untested code, ignores all of the boilerplate Location Services Authorization code and request user permission to Location services 
var locationManager: CLLocationManager? 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Check if launched from notification (received APN while in background) 
    if let notification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject] { 
     let aps = notification["aps"] as! [String: AnyObject] 
     print("received background apn, aps: \(aps)") 

     locationManager = CLLocationManager() 
     locationManager!.delegate = self 
     locationManager!.startUpdatingLocation() // this is what starts the location services query 
    } 

    ... 

    return true 
} 


func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let location = locations[0] 

    // here is where you would send location to your backend 

    // shut down location services: 
    locationManager?.stopUpdatingLocation() 
    locationManager?.delegate = nil 
    locationManager = nil 
} 
+0

iOS 10처럼 알림 서비스 확장 프로그램을 사용하여 알림이 도착할 때마다 사용자 지정 코드를 실행할 수 있습니다. 위의 방법보다 이것이 선호 될까요? 어느 방법이 장치 재부팅, 앱 강제 종료 등을 통해 안정적으로 작동 할 가능성이 더 높습니까? – sfdev941

+0

당신은'UNLocalNotificationTrigger'에 대해 이야기하고 있습니까? 나는 아직 그것에 대한 경험이 없다. –