Creating a Location Push Service Extension

Panther·2021년 9월 9일
0
post-custom-banner

https://developer.apple.com/documentation/corelocation/cllocationmanager/creating_a_location_push_service_extension

"Add and configure an extension to enable your location sharing app to access a user’s location in response to a request from another user."

다른 사용자로부터의 요청에 대한 응답에서 사용자의 위치 접근을 위해 위치 공유 앱을 활성화하고자 확장을 추가하고 설정합니다.

Overview

iOS 15부터 사용 가능한 위치 푸시 서비스 확장은 앱이 실행중이지 않을 때에도 iOS 혹은 iPadOS 기기에 대한 위치를 쿼리하는 효율적인 방법이니다.

앱이 위치 푸시 서비스 확장을 포함하는 경우 시스템은 서버로부터 애플 푸시 노티피케이션 서비스(APNs) 위치 푸시를 받을 때 확장을 활성화합니다. 앱은 확장이 기능할 수 있기 전에 사용자로부터 "항상" 권한(CLAuthorizationStatus.authorizedAlways)을 요청하고 받아야 합니다. "항상" 권한 요청에 대한 정보는 Requesting Authorization for Location Services와 requestAlwaysAuthorization()을 보시기 바랍니다.

Requesting Authorization for Location Services
https://developer.apple.com/documentation/corelocation/requesting_authorization_for_location_services
https://velog.io/@panther222128/Requesting-Authorization-for-Location-Services

사용자의 권한을 사용해서 확장은 사용자의 위치를 쿼리할 수 있고, 앱의 목적에 따라 사용자의 위치를 처리할 수 있습니다. 서버는 APNs로 위치 푸시 타입을 갖는 요청을 보냅니다. APNs에 요청을 보내는 것에 대한 더 많은 정보는 Sending Notification Requests to APNs를 보시기 바랍니다.

Sending Notification Requests to APNs
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns
https://velog.io/@panther222128/Sending-Notification-Requests-to-APNs

Important
위치 푸시 서비스 확장을 사용하려면 앱은 com.apple.developer.location.push 자격을 가져야 합니다. 이 서비스 확장 구현 전에 이 자격을 요청해야 합니다. 이 자격을 적용하려면 Account Holder 역할을 갖는 개발자 계정에 로그인하고 요청 양식을 채워야 합니다.

Configure Your Xcode Project

앱에서 위치 푸시 서비스 확장을 포함시키려면 Xcode 13 혹은 이후 버전을 사용해야 합니다. 아래 자격, 기능, 키를 Xcode 프로젝트에서 설정해야 합니다.

  1. 위치 푸시 서버 확장 자격 키(com.apple.developer.location.push)를 설정해야 합니다.
  2. 푸시 노티피케이션 기능을 추가해서 애플 푸시 노티피케이션 서비스(APNs) 푸시를 받기 위해 앱을 활성화해야 합니다. 더 많은 정보는 Registering Your App with APNs를 보시기 바랍니다.
  3. 위치 서비스 권한 프롬프트에 대해 앱이 제공하는 목적 스트링을 설정해야 합니다. 더 많은 정보는 Requesting Authorization for Location Services를 보시기 바랍니다.

Requesting Authorization for Location Services
https://developer.apple.com/documentation/corelocation/requesting_authorization_for_location_services
https://velog.io/@panther222128/Requesting-Authorization-for-Location-Services

Add a Location Push Service Extension Target

위치 푸시 서비스 확장 템플릿을 사용해서 새 타깃을 추가하시기 바랍니다.

  1. Xcode에서 iOS 앱 프로젝트를 엽니다.
  2. 파일 > 새 파일 > 타깃을 선택합니다.
  3. iOS 애플리케이션 확장 그룹으로부터 위치 푸시 서비스 확장을 선택합니다.
  4. 다음을 클릭합니다.
  5. 확장의 이름을 구체화하고 언어 및 기타 옵션을 설정합니다.
  6. 완료를 클릭합니다.
  7. Xcode는 시작을 가져오기 위해 CLLocationPushServiceExtension의 서브클래스를 생성합니다.

Implement Location Push Functionality

위치 푸시 기능을 지원하려면 확장, 앱, 서버에서 아래 코드를 구현해야 합니다.

  1. 서비스 확장에서 CLLocationPushServiceExtension 서브클래스를 구현해야 합니다.
  2. 서비스 확장에서 위치 요청의 결과를 처리하기 위해 locationManager(_:didUpdateLocations:) 메소드를 구현해야 하며, 받은 위치 데이터를 처리해야 합니다.
  3. 앱에서 데이터 역할을 하는 APNs 토큰을 받기 위해 startMonitoringLocationPushes(completion:)을 호출하고, 서버에 토큰을 보내야 합니다. 서버는 이 토큰을 APNs 푸시를 생성할 때 사용합니다.
  4. 위치 푸시 요청을 APNs에 보내서 서버로부터 위치 정보를 요청합니다.

사용자가 앱에 "항상" 권한(CLAuthorizationStatus.authorizedAlways)을 부여하면, 시스템은 위치 푸시를 받을 때 서비스 확장을 활성화 시키며, didReceiveLocationPushPayload(_:completion:)을 호출합니다. 앱은 적합한 시기에 사용자에게 "항상" 권한을 요청해야 합니다.

Important
위치 데이터를 처리할 때 사용자 개인정보 보호는 중요합니다. 엔드 투 엔드 암호화는 앱이 사용자의 기기 밖으로 위치 데이터를 옮기는 경우 강화된 보안을 제공합니다. 이는 서버 혹은 다른 사용자에게 전송하는 경우를 포함합니다. 더 많은 정보는 Protecting the User's Privacy를 보시기 바랍니다.

Send Location Push Requests From Your Server

사용자가 다른 사용자의 위치를 요청하는 경우 앱은 APNs로 위치 푸시 요청을 보내는 서버에 요청을 보내야 합니다. APNs 포스트 요청이 위치 푸시 타입에 대한 아래 필드 포함을 확실하게 해야 합니다.

method
(필수사항) 값은 포스트입니다.

path
(필수사항) 기기 토큰으로의 경로입니다. 이 헤더의 값은 <device_token>이 사용자 기기의 16진수 아이덴티파이어인 /3/device/<device_token>입니다. 앱이 위치 푸시 모니터링 시작을 위해 startMonitoringLocationPushes(completion:)을 호출할 때 앱은 토큰을 받습니다.

authorization
(토큰 기반 인증에 대해 필수사항) 이 헤더의 값은 <provider_token>이며, 특정 주제에 노티피케이션을 전송하기 위해 인증하는 암호화된 토큰인 <provider_token>입니다. 더 많은 정보는 Establishing a Token-Based Connection to APNs를 보시기 바랍니다.

apns-topic
주제는 접미사 ".location-query"를 갖는 앱의 번들 아이디입니다.

apns-push-type
(권장사항) 이 헤더의 값은 위치입니다.

apns-priority
노티피케이션의 우선순위입니다. 이 헤더를 생략하면 APNs는 노티피케이션 우선순위를 10으로 설정합니다. 사용자가 위치 쿼리를 시작하면 이 헤더를 10으로 설정합니다. 앱의 서버가 위치 쿼리(예를 들어 주기적 인터벌)를 시작하면, 사용자 기기에 대한 전력을 고려해서 노티피케이션을 전달하기 위해 이 헤더를 5로 설정해야 합니다.

APNs 요청을 보내는 것과 커맨드 라인 툴을 사용해서 APNs 요청을 보내는 것에 대한 정보는 Sending Notification Requests to APNs 및 Sending Push Notifications Using Command-Line Tools를 보시기 바랍니다.

Sending Notification Requests to APNs
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns
https://velog.io/@panther222128/Sending-Notification-Requests-to-APNs

Sending Push Notifications Using Command-Line Tools
https://developer.apple.com/documentation/usernotifications/sending_push_notifications_using_command-line_tools
https://velog.io/@panther222128/Sending-Push-Notifications-Using-Command-Line-Tools

post-custom-banner

0개의 댓글