티스토리 뷰
다른 분들은 Java에서 구현하는게 더 편하고 좋다고 하는데 저는 그냥 PHP가 더 좋은것 같습니다.
그냥 이유가 없네요 ㅎㅎ
일단 라이브러리를 사용하면 아주 편리하게 만들수 있습니다.
아무것도 할 필요가 없죠.
그렇지만 우리가 라이브러리에 의존만 한다면 좋은 개발자가 될수가 없겠죠.
돌아가는 구조나 어떠한 원리에 의해서 동작하는지도 알아야 좋은 개발자라 생각합니다.
라이브러리 가져다 쓰는건 그 이후에...
라이브러리를 찾아오셨다면 이것을 이용하시기 바랍니다.
https://github.com/jwage/php-apns
솔찍히 내부를 보니 제가 적을 글이랑 동일하게 소스가 되어 있네요.
1. pem 파일 만들기
키체인 접근을 열어서 애플 개발자 사이트에서 받아서 사용하는 Push 인증서를 이용하여야 합니다.
이 글에서는 이것을 만드는 법은 따로 다루지 않겠습니다.
p12 로 내보내기를 하면 되는 부분입니다.
인증서와 키를 따로 따로 내보내기를 하여 주면 됩니다.
apns-dev-cert.p12 , apns-dev-key.p12 이런식으로 저장을 하여 주고요.
다음과 같이하여 pem파일을 만들어 줍니다.
1 2 | $ openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12 $ openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 | cs |
passphrease를 개인키에서 제거하여 줍니다.
1 | $ openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem | cs |
마지막으로 두개의 파일을 하나로 만들어 줍니다.
1 | cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem | cs |
2. PHP 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php function address($isSandBox) { if ($isSandBox) { return 'ssl://gateway.sandbox.push.apple.com:2195' } else { return 'ssl://gateway.push.apple.com:2195' } } $deviceToken = '123456...fas123'; // 디바이스토큰ID $address = address(true) $apnsCert = $isSandBox ? 'apns-dev.pem' : 'apns-production.pem'; $message = 'Hello, APNS!'; // 전송할 메시지 $payload = array('aps' => array('alert' => $message, 'badge' => 0, 'sound' => 'default')); // 이전 규격으로 Title이 전송되지 않음 $payload = json_encode($payload); $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); $apns = stream_socket_client(address, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); if($apns) { $apnsMessage = chr(0).chr(0).chr(32).pack('H*', str_replace(' ', '', $deviceToken)).chr(0).chr(strlen($payload)).$payload; fwrite($apns, $apnsMessage); fclose($apns); } ?> | cs |
이전 규격인 Title이 들어가 있지 않은 형태로 전송이 됩니다.
payload 규격은 다음에서 확인하시기 바랍니다.
참고로 alert안의 title 규격은 iOS 8.2부터 시작이 되었습니다.
'Language > PHP' 카테고리의 다른 글
PHP. Router 만들기 (0) | 2020.08.08 |
---|---|
php. redirection 리다이렉션 만들기 (0) | 2020.03.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- docker
- ubuntu
- Windows
- golang
- Linux
- Gradle
- Codable
- Kotlin
- CentOS
- rxswift
- war
- tomcat
- Spring
- android
- intellij
- ios
- MySQL
- php
- github
- enum
- SWIFT
- windows10
- go
- Xcode
- git
- Python
- cocoapods
- centos8
- Java
- nodejs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함