본문 바로가기
프로그래밍_

IOS 개발 APNs 아이폰 테스트

by Mocca_ 2023. 1. 28.

IOS에서 Push기능을 개발하는데 시행착오가 많습니다. 애플 개발자 홈페이지에서는 자세히 설명해주진 않았고 일부의 예제를 보고 따라하려니까 쉽지 않은게 사실입니다. 이번에는 IOS 개발 푸시를 테스트하는 과정을 정리해보겠습니다.


[목차]

  1. Java 푸시서버를 개발하기 위한 p12 인증서
  2. APNs 서버 테스트

 

1. Java 푸시서버를 개발하기 위한 p12 인증서

 

이번에 골치아팠던 부분은 Java로 APNs에 통신을 해서 원하는 때에 푸시메시지를 보내게 하는 과정이었습니다. 토큰 방식 (p8 인증서) 방식으로 한다면 자바에서는 Pushy 라이브러리를 사용하면 되지만 현재 상태는 p12 인증서 방식이며 레거시 라이브러리인 notnoop을 사용했습니다. 

 

Pushy Library : https://github.com/jchambers/pushy

notnoop Library : https://github.com/notnoop/java-apns

 

애플 Push 개발의 전 과정 사전지식 :

2023.01.25 - [취미로 코딩하기] - iOS Push Notification 개발 및 테스트, 사용법

 

iOS Push Notification 개발 및 테스트, 사용법

iOS에서 Push Notification을 개발하거나 테스트하려면 개발자계정이 있어야 합니다. 요즘 push기능이 없는 앱은 거의 없습니다. 개발자계정에 어떤 종류가 있는지도 다룰 테지만 먼저 정리해야 할 것

commnetall.tistory.com

 

우선 p12 인증서 방식으로 하는 것으로 정해졌습니다. 라이브러리도 그대로 notnoop을 사용하기로 정해졌습니다.

p12 인증서 발급받는 과정은 전 포스팅에서 링크해놓았기 때문에 따로 언급하진 않겠습니다. 

 

 Java server에서 사용하려면 p12 인증서에서 추가적인 무언가를 더 해줘야된다는 사실을 간과했습니다. 

 

우선 준비할 파일은 고생고생해서 받은 aps.cer 파일과 인증서.p12 파일입니다. 

 

그 다음 터미널을 켜고 

 

 

openssl x509 -in aps.cer -inform DER -out aps_production.pem -outform PEM

openssl pkcs12 -nocerts -in 인증서.p12 -out key.pem

openssl pkcs12 -export -inkey key.pem -in aps_production.pem -out 원하는최종인증서이름.p12

 

이런 식으로 최종인증서까지 합쳐준 후 Java 푸시서버에 넘겨줘야합니다.  주황색은 입력파일, 빨강색은 생성되는 출력파일입니다. pem 확장자 파일은 2개가 필요하며 2개의 pem파일을 합쳐서 다시 p12 파일을 만들어줍니다.

 

	ApnsService service =APNS.newService()
    	.withCert('p12파일경로입력', 'p12설정했던비밀번호입력')
		.withProductionDestination()
		.build();

 

파일시스템에 경로를 입력해주고 비밀번호를 입력해주어서 APNS service에 넣어줍니다. 

푸시를 날릴때에는 service.push 메소드를 사용하면 됩니다.

 

 

2. APNs 서버 테스트

 

처음 pem과 p12를 왜 써야하는지 몰라서 어려웠습니다. pem은 터미널에서 test를 위해서 사용할 수도 있고 PHP 푸시서버에서 푸시를 보낼 때 사용하기도 합니다. 

 

 

APNs 테스트로는 여러 방법이 있습니다. 우선 제일 빠른 방법은 앱을 이용하는 것입니다. 

푸시알람테스터 앱스토어
푸시알람테스터, APNs Helper

유료도 있고 무료도 있어서 골라서 선택하시면 됩니다. 

 

애플에서 제공하는 방법도 있습니다. 커맨드 라인인데요. 

// TLS 연결이 되는지 확인
% openssl s_client -connect "${APNS_HOST_NAME}":443 -cert "${CERTIFICATE_FILE_NAME}" -certform DER -key "${CERTIFICATE_KEY_FILE_NAME}" -keyform 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}

// 각 위치에 넣어야 할 것
CERTIFICATE_FILE_NAME= .cert파일을 pem으로 만든 파일, apn_production.pem
CERTIFICATE_KEY_FILE_NAME= .p12 파일을 pem으로 만든 파일, key.pem
TOPIC= 앱의 bundle id, 개발자계정이나 xcode에서 확인할 수 있음
DEVICE_TOKEN= user기기의 devicetoken
APNS_HOST_NAME=api.sandbox.push.apple.com

터미널에서 푸시 이렇게 날려주셔도 됩니다.

 

 제일 좋은 것은 실제 서버에서 코드를 통해서 푸시를 날려주는 테스트를 하는 것이 좋습니다. 하지만 서버 개발자의 일이 있기 때문에 전부 자신이 하지 않는 이상 서버 개발자에게 주기 전에 테스트해보는 것이 나아보입니다.

 

 


[함께 읽으면 좋은 글]

2023.01.25 - [취미로 코딩하기] - iOS Push Notification 개발 및 테스트, 사용법

 

iOS Push Notification 개발 및 테스트, 사용법

iOS에서 Push Notification을 개발하거나 테스트하려면 개발자계정이 있어야 합니다. 요즘 push기능이 없는 앱은 거의 없습니다. 개발자계정에 어떤 종류가 있는지도 다룰 테지만 먼저 정리해야 할 것

commnetall.tistory.com

 

2023.01.25 - [취미로 코딩하기] - Docker, 도커를 사용하는 이유와 도커 설치법

 

Docker, 도커를 사용하는 이유와 도커 설치법

도커를 사용하면 서버환경 구성하기 편하다는 말을 조금씩 들어왔지만 제대로 공부하고 설치해본 적은 없었습니다. 그래서 이번에는 도커를 활용해 AZURE나 AWS서버를 구축하는 과정을 해보려했

commnetall.tistory.com

 

2023.01.11 - [취미로 코딩하기] - React vs Flutter 무엇을 써야 할까 ? - 개발자 언어, 앱 언어, 개발 외주, 로드맵

 

React vs Flutter 무엇을 써야 할까 ? - 개발자 언어, 앱 언어, 개발 외주, 로드맵

요즘 스타트업에서 자주쓰는 언어는 React와 Flutter입니다. React는 페이스북이 개발한 사용자 인터페이스를 만들기 위한 라이브러리입니다. Flutter는 구글이 만든 원코드베이스 모바일, 웹, 데스크

commnetall.tistory.com


 

 

 

댓글