"Use basic macOS command-line tools to send push notifications to Apple Push Notification service (APNs)."
애플 푸시 노티피케이션 서비스(APNs)에 푸시 노티피케이션을 전송하기 위해 기본적인 macOS 커맨드 라인 툴을 사용합니다.
테스트 앱을 작성해서 APNs 연결 및 설정을 테스트하는 것은 많은 노력을 기울여야 하고 시간을 소모할 수 있습니다. 아래에 설명하고 있는 커맨드 라인 툴은 nonproduction-quality 테스트 suite 혹은 앱에서 APNs에 대한 설정을 테스트할 수 있는 빠른 방법을 제공합니다.
시작하기 전에 아래 내용을 확인해야 합니다.
필요한 것은 아래와 같습니다.
Establishing a Certificate-Based Connection to APNs
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns
https://velog.io/@panther222128/Establishing-a-Certificate-Based-Connection-to-APNs
Create a certificate signing request
https://help.apple.com/developer-account/#/devbfa00fef7
Register an App ID
https://help.apple.com/developer-account/#/dev1b35d6f83
Registering Your App with APNs
https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
https://velog.io/@panther222128/Registering-Your-App-with-APNs
최신 macOS 버전에서 터미널 앱을 launch하는 것부터 시작합니다. 다음으로 shell 변수를 설정합니다.
CERTIFICATE_FILE_NAME=path to the certificate file
CERTIFICATE_KEY_FILE_NAME=path to the private key file
TOPIC=App ID
DEVICE_TOKEN=device token for your app
APNS_HOST_NAME=api.sandbox.push.apple.com
아래 명령을 사용해서 APNs에 인증서가 연결할 수 있는지 테스트합니다.
% openssl s_client -connect "${APNS_HOST_NAME}":443 -cert "${CERTIFICATE_FILE_NAME}" -certform DER -key "${CERTIFICATE_KEY_FILE_NAME}" -keyformat PEM
다음으로 아래 명령을 사용해 푸시 노티피케이션을 보냅니다.
% curl -v --header "apns-topic: ${TOPIC}" --header "apns-push-type: alert" --cert "${CERTIFICATE_FILE_NAME}" --cert-type DER --key "${CERTIFICATE_KEY_FILE_NAME}" --key-type PEM --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}
결과는 200의 HTTP 상태(요청 성공)입니다. "test" 텍스트를 갖는 노티피케이션이 목적 기기에 나타납니다.
필요한 것은 아래와 같습니다.
Locate your Team ID
https://help.apple.com/developer-account/#/dev55c3c710c
Get a key identifier
https://help.apple.com/developer-account/#/dev646934554
Revoke, edit, and download keys
https://help.apple.com/developer-account/#/dev3a82eef1c
Register an App ID
https://help.apple.com/developer-account/#/dev1b35d6f83
Registering Your App with APNs
https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
https://velog.io/@panther222128/Registering-Your-App-with-APNs
최신 macOS 버전에서 터미널 앱을 launch하는 것부터 시작합니다. 이후 shell 변수를 설정합니다.
TEAM_ID=Team ID
TOKEN_KEY_FILE_NAME=path to the private key file
AUTH_KEY_ID=your key identifier
TOPIC=App ID
DEVICE_TOKEN=device token for your app
APNS_HOST_NAME=api.sandbox.push.apple.com
아래 명령을 사용해서 APNs에 연결할 수 있는지 테스트합니다.
% openssl s_client -connect "${APNS_HOST_NAME}":443
푸시 노티피케이션 전송 전에 추가적인 shell 변수를 설정합니다.
JWT_ISSUE_TIME=$(date +%s)
JWT_HEADER=$(printf '{ "alg": "ES256", "kid": "%s" }' "${AUTH_KEY_ID}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_CLAIMS=$(printf '{ "iss": "%s", "iat": %d }' "${TEAM_ID}" "${JWT_ISSUE_TIME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_HEADER_CLAIMS="${JWT_HEADER}.${JWT_CLAIMS}"
JWT_SIGNED_HEADER_CLAIMS=$(printf "${JWT_HEADER_CLAIMS}" | openssl dgst -binary -sha256 -sign "${TOKEN_KEY_FILE_NAME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
AUTHENTICATION_TOKEN="${JWT_HEADER}.${JWT_CLAIMS}.${JWT_SIGNED_HEADER_CLAIMS}"
아래 명령을 사용해서 푸시 노티피케이션을 전송합니다.
% curl -v --header "apns-topic: $TOPIC" --header "apns-push-type: alert" --header "authorization: bearer $AUTHENTICATION_TOKEN" --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}
결과는 HTTP 상태 200(요청 성공)입니다. "test" 텍스트를 갖는 노티피케이션이 목적 기기에서 나타납니다.
노티피케이션을 생성하고 사용자 기기로 푸시합니다.
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server
https://velog.io/@panther222128/Setting-Up-a-Remote-Notification-Server
애플 푸시 노티피케이션 서비스(APNs)와 커뮤니케이션하고, 앱을 식별하는 고유한 기기 토큰을 받습니다.
https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
https://velog.io/@panther222128/Registering-Your-App-with-APNs