iPhone - Apple Push 알림 서버 작성

원본 주소 (영문 판):http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/
다음은 번역문 이다.
아이 폰 OS 3.0 의 새로운 기능 은 push notifications (푸 시 알림) 입 니 다. 해당 프로그램 이 설 치 된 장치 에 직접 메 시 지 를 보 낼 수 있 습 니 다.애플 은 뉴스 알림 이나 IM 애플 리 케 이 션 에서 이 기능 을 보 여 주 었 으 며 서버 감시 서비스 프로그램 인 Server Density 에 도 완벽 하 게 적합 하 다.
Google 프로그램 은 사용자 가 설정 한 서버 이벤트 가 발생 하면 알림 을 아이 폰 에 직접 보 내 는 옵션 을 제공 합 니 다.이것 은 사용자 에 게 이 경 고 를 일 으 킨 서버 의 상세 한 정 보 를 즉시 열 라 고 일 깨 워 주기 때문에 매우 유용 하 다.
Apple 은 구현 및 처리 장치 에 대한 알림 메 시 지 를 제공 합 니 다.  아이 폰 OS 상세 코드 문서 ,그러나 메시지 공급 자 서버 엔 드 프로 그래 밍 안내 만 포함 된다.
메시지 제공 자로 서 아이 폰 에 메 시 지 를 보 내기 위해 애플 푸 시 알림 서비스 (APNS) 와 연결 해 야 합 니 다.배터리 사용 을 줄 이기 위해 서 는 한 장치 가 APNS 와 의 연결 만 유지 해 야 한다.
이 강 좌 는 코드 차원 에서 APNS 를 연결 하고 푸 시 알림 을 사용 하여 서버 감시 아이 폰 프로그램 에 푸 시 알림 서버 를 만 드 는 방법 을 소개 합 니 다.우 리 는 PHP 를 사용 하여 개발 한 것 입 니 다. 우리 의 예 는 모두 PHP 5 호 환 입 니 다.
  
기본 구조
APNS 에 유일한 SSL 라이선스 로 연결
반복 해서 메 시 지 를 보 내야 합 니 다 각 메시지 에 유효 부하 구축 APNS 와 의 연결 끊 기 원 격 알림 데이터 의 절 차 는 단 방향 입 니 다.공급 자 는 클 라 이언 트 장치 토 큰 과 유효 부하 데 이 터 를 포장 하여 APNS 에 보 낸 다음 APNS 에서 최종 장치 에 알림 을 보 냅 니 다.
- Apple 문서
  
제한 하 다.
유효 부하 제한 256 바이트 – 메시지 주체 및 전송 벨트 기타 속성 을 포함 합 니 다.푸 시 알림 은 대량의 데 이 터 를 전송 하 는 데 적합 하지 않다.예 를 들 어 서버 에 감 시 를 알 리 는 짧 은 메 시 지 를 전송 하 는 사건 이 촉발 되 었 습 니 다.
APNS 는 메시지 발송 성공 여부 에 대한 피드백 상 태 를 제공 하지 않 습 니 다.한 가지 이 유 는 장치 가 연락 이 되 지 않 으 면 보 낸 메 시 지 는 대기 열 에 저 장 됩 니 다. 그러나 최신 보 낸 메시지 만 대기 열 에 저 장 됩 니 다. - 이전에 보 냈 지만 성공 하지 못 한 메 시 지 를 덮어 씁 니 다.
푸 시 알림 은 긴급 알림 을 보 내 는 데 적합 하지 않 습 니 다. 메 시 지 는 장치 가 와 이 파이 나 모 바 일 서비스 로 연 결 된 경우 에 만 보 낼 수 있 기 때 문 입 니 다. 이것 도 우리 가 이메일 이나 SMS 와 같은 다른 방법 을 추천 하 는 이유 입 니 다.
APNS 와 의 통신 을 위 한 SSL 라이선스 (아래 토론) 는 프로그램 계층 에서 생 성 됩 니 다.이 튜 토리 얼 은 하나의 아이 폰 프로그램 에 만 적합 하기 때문에 여러 개의 프로그램 이 있다 면 여러 개의 허가증 을 사용 하 는 데 적합 하도록 코드 를 수정 해 야 합 니 다.
  
장치 토 큰
모든 푸 시 메 시 지 는 반드시 특정한 설 비 를 겨냥 해 야 한다.이것 은 당신 의 아이 폰 프로그램 에서 APNS 에서 생 성 된 유일한 device Token (장치 토 큰) 을 통 해 이 루어 집 니 다.이 토 큰 을 가 져 오 면 아이 폰 프로그램 이 아 닌 서버 에 저장 해 야 합 니 다.그것 은 이렇게 보인다.
c9d4c07c fbbc26d6 ef87a44d 53e16983 1096a5d5 fd825475 56659ddd f715defc
서버 Density iPhone 프로그램 에서 프로그램 이 시 작 될 때 해당 토 큰 생 성 방법 을 호출 한 다음 통과 합 니 다. HTTP API 호출 우리 서버 에 전송 해.이 는 deviceToken 을 서버 의 사용자 관련 데이터베이스 에 저장 하여 이 장 치 를 가 진 사용자 와 통신 할 수 있 습 니 다.
  
피드백 서비스
애플 은 또 하 나 를 제공 했다. 피드백 서비스 ,너 는 정기 적 으로 조회 해 야 한다.이것 은 이전에 사 용 했 지만 더 이상 유효 하지 않 은 장치 토 큰 목록 을 제공 합 니 다.너 는 데이터베이스 에서 이 장치 토 큰 들 을 삭제 할 수 있다.
본 튜 토리 얼 은 피드백 서비스의 사용 과 관련 이 없다.
  
라이선스
푸 시 서 비 스 를 하 는 첫 번 째 일 은 푸 시 허가증 을 얻 는 것 이다.그것 은 SSL 을 통 해 APNS 와 통신 하 는 것 을 식별 하 는 데 쓰 인 다.
Mac 에서 Apple 푸 시 알림 SSL 허가증 생 성:
로그 인 iPhone Developer Connection Portal 앱 ID 마스크 를 사용 하지 않 는 App ID 만 들 기 。마스크 ID 는 푸 시 알림 서비스 에 사용 할 수 없습니다.예 를 들 어, 우리 의 아이 폰 프로그램 ID 는 이렇게:  AB123346CD.com.serverdensity.iphone
App ID 옆 에 있 는 "Configure" 를 누 르 고 버튼 을 눌 러 서 생산 합 니 다. 통지 허가증 을 송부 하 다.'마법사' 가 안내 하 는 절차 에 따라 서명 을 만 들 고 업로드 하 며 마지막 으로 생 성 된 허가증 을 다운로드 합 니 다.단계 Apple 문서 중 언급 도 있 었 다.
. cer 파일 을 더 블 클릭 하여 apsdeveloper_idenity. cer 가 Keychain 에 도입 되 었 습 니 다.
Mac 에서 Keychain 조 수 를 시작 한 다음 login keychain 에서 Certificates 분 류 를 선택 하 십시오.확장 가능 한 옵션 인 "Apple Development Push Services" 를 볼 수 있 습 니 다.
이 옵션 을 확장 하고 'Apple Development Push Services' > Export' Apple Development Push Services ID 123 '을 우 클릭 합 니 다.apns - dev - cert. p12 파일 로 저장 합 니 다.
'Apple Development Push Services' 를 확장 하여' Private Key '를 같은 동작 으로 apns - dev - key. p12 파일 로 저장 합 니 다.
터미널 명령 을 통 해 이 파일 들 을 PEM 형식 으로 변환 해 야 합 니 다.
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
비밀 번 호 를 제거 하려 면 내 보 내기 / 변환 할 때 설정 하거나 실행 하지 마 십시오.
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
마지막 으로, 키 와 허가 파일 을 apns - dev. pem 파일 로 합성 해 야 합 니 다. 이 파일 은 APNS 에 연결 할 때 사용 해 야 합 니 다:
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem
이 파일 을 기억 하기 쉬 운 이름 으로 저장 하면 나중에 사용 할 수 있 습 니 다.상술 한 절 차 는 제품 허가증 생 성에 도 적합 하 다.
  
부하 내용
하중 RFC 4627 기준 을 따 르 는 JSON 포맷 으로 포맷 했다.그것 은 다음 과 같은 몇 부분 으로 구성 된다.
알림 - 장치 에 표 시 된 텍스트 문자열 표지 - 장치 화면 에 있 는 프로그램 아이콘 에 표 시 된 정수 소리 장치 에서 동시에 나 오 는 소 리 를 표시 하 는 텍스트 이름 이 튜 토리 얼 은 간단 한 알림 텍스트 문자열 만 보 내 는 것 을 처리 하지만 사용자 정의 단 추 를 표시 하 는 등 다양한 옵션 을 포함 한 사전 집합 을 보 낼 수 있 습 니 다.
  
생 성 부하
PHP 를 사용 하면 배열 에 따라 JSON 으로 변환 하여 부하 만 들 기:
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');
$payload = json_encode($payload);

$payload 의 내용 을 표시 하면 APNS 로 전송 되 는 것 을 볼 수 있 습 니 다. JSON 문자열:
{
"aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" }
}

이것 은 메 시 지 를 장치 에 표시 하고 소 리 를 올 리 며 '1' 을 프로그램 아이콘 에 표시 합 니 다.기본 단추 인 'Close' 와 'View' 는 팝 업 창 에 동시에 표 시 됩 니 다.
서버 Density 아이 폰 프로그램 에 서 는 "View" 를 누 르 고 이 알림 이 생 긴 서버 에 직접 들 어가 게 하 는 것 이 중요 하기 때문에 사용자 정의 값 을 추가 합 니 다.
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');
$payload['server'] = array('serverId' => $serverId, 'name' => $name);
$output = json_encode($payload);

사용자 가 "View" 를 누 르 면 사용자 정의 server 값 이 장치 에 전 달 될 프로그램 입 니 다.JSON 값 은 다음 과 같 습 니 다.
{
"aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" },
"server" : { "serverId" : 1, "name" : "Server name")
}

256 바이트 의 제한 은 사용자 정의 사전 집합 을 포함 하여 전체 부하 에 적용 된다.
  
네 이 티 브 인터페이스
서버 Density 에 서 는 알림 이 생기 면 로드 를 만 들 고 대기 열 에 삽입 합 니 다.따라서 필요 할 때 우 리 는 여러 개의 하중 을 동시에 발송 할 수 있다.
애플 은 이 방법 을 추천 합 니 다. 각 하중 을 보 낼 때 자주 연결 되 고 끊 기 면 APNS 가 IP 를 차단 할 수 있 기 때 문 입 니 다.
사과 설명:
원생 인 터 페 이 스 는 원생 socket 을 사용 하여 이 진 내용 을 가지 고 데이터 흐름 기술 을 사용 하여 피드백 이 발생 하지 않 습 니 다.
  
연결 열기
연결 의 를 연다 PHP 5 코드 는 다음 과 같 습 니 다:
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apns-dev.pem';

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2,
STREAM_CLIENT_CONNECT, $streamContext);

오류 가 발생 하면 $errorString 을 참고 하 십시오.SSL 허가증 이 정확 하지 않 을 때의 상세 한 정보 도 포함 되 어 있다.
라이선스 파일 은 실행 중인 PHP 코드 의 현재 작업 디 렉 터 리 에 있 습 니 다. 필요 하 다 면 절대 경 로 를 지정 할 수 있 습 니 다.
테스트 시 개발 허가증 및 Sandbox 를 사용 해 야 합 니 다.완제품 호스트 이름 은 gateway. push. apple. com 이 며, 서로 다른 제품 허가증 을 사용 해 야 합 니 다.
  
송신 하중
여기 서, 우 리 는 전체 부하 행렬 을 순환 하여 발송 합 니 다.APNS 에 보 내 는 바 이 너 리 내용 을 구축 하 는 간단 한 예 는 다음 과 같 습 니 다.
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) .
chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);

$device Token 은 데이터베이스 에서 빈 칸 을 추출 하고 제거 합 니 다.우 리 는 또한 $payload 가 256 바이트 가 넘 는 지 확인 해 야 한다.
$apnsMessage 는 올 바른 바 이 너 리 로드 를 포함 하고 fwrite 는 현재 활동 하 는 데이터 흐름 연결 에 로드 를 기록 합 니 다.
완료 후 연결 을 닫 아야 합 니 다:
socket_close($apns);
fclose($apns);

좋은 웹페이지 즐겨찾기