이 내용은 검색해도 제대로 나와 있는게 없어서 간단히 정리하여 공유하는 수준입니다.

 

APNS에 관심을 가지시는 분들이 많을겁니다.

APNS는 프로바이더가 Push서비스를 하기 위한 시스템 구축할 필요없이 Apple을 도움을 받아 구현할 수 있기 때문에 적은노력으로 최대한의 효과를 볼 수 있는 아주 유용한 서비스이지요.

 

APNS를 접하다 보면 헷갈리는게 있습니다.

 

Provisioing Portal에 들어가면 APNS가 2가지 종류라는 겁니다.

1. 개발버전

2. 배포버전

 

개발버전 APNS는 Provisioning Profile에서 Development와 연관 있습니다. 단순히 Xcode상에서 디바이스로 디버깅할때 유용합니다.

배포버전 APNS는 Provisioning Porfile에서 Distribution과 연관 있습니다. 이는 Adhoc이든 AppStore든 상관없습니다.

 

이렇게 구분된 이유는 저는 개발할때와 배포할때 APNS가 동일하면 발생되는 문제점을 해소하기 위함이라고 이해했습니다.

만약 개발과 배포시 APNS가 동일하다면 서비스하는 도중에 개발하면서 잘못된 APNS를 사용자들에게 보내버릴 수 있는 경우가 발생할 수 있습니다. 이러한 상황을 미연 차단한 것이라고 생각됩니다.

 

그럼... 두가지 버전의 명확한 차이는 무엇일까요?

 

첫째, 바로 발행하는 인증서가 다르겠죠? 인증서는 App ID에서 발행하므로 어플마다 다릅니다.

 

둘째, Device Token 값이 다릅니다. 개발버전의 Device Token과 배포버전(Adhoc, Appstore)의 Device Token은 다릅니다. 이것은 어플마다 다르지 않고 Device마다 다릅니다. 하지만 기기의 고유 UUID와는 다릅니다.

 

셋째, 그리고 프로바이더(java든, php든 상관없이) 입장에서 gateway 주소가 다릅니다. 개발버전에서는 gateway.sandbox.push.apple.com 에 접속하고 배포버전에서는 gateway.push.apple.com에 접속합니다. 포트번호는 둘다 2195이지요.

 

이 부분에 대해서 명확하게(그것도 한글로.. ^^;) 설명한 내용이 없었습니다.

제가 영어를 잘해서 Apple문서를 정독했더라면 알 수 있는 내용이였지만.... 결국 삽질끝에 파악한 내용이네요. ㅎㅎㅎ

 

아무튼 유용한 정보가 되었길...

 

다른 유용글

[iPhone/Java] 내가 만든 어플에 Push Notification 적용하기

APNS Device Token을 못받아올때

글쓴이 : 지돌스타(http://blog.jidolstar.com/724)

 

Error: Error Domain=NSCocoaErrorDomain Code=3000 "응용 프로그램에 대해 발견된 'aps-environment' 인타이틀먼트 문자열 없음" UserInfo=0x117d00 {NSLocalizedDescription=응용 프로그램에  발견된 'aps-environment' 인타이틀먼트 문자열 없음}

 

AppDelegate에서 DeviceToken을 받지 못하고 Error 메시지를 띄우는 경우가 있습니다.

분명 Development나 Adhoc Provisioning Profile을 받아서 정상적으로 컴파일 했는데도 발생되는 문제입니다.

위와 같은 내용이 들어오면 다음 방법으로 문제를 해결합니다.

(디바이스에서 테스트 경험이 있는 분들만 이해하실 수 있습니다.)

 

1. iOS Provisioning Portal 에 갑니다.

2. App IDs 메뉴로 들어가 APNS를 Enabled 시킵니다.

3. Provisioning 메뉴으로 들어가 이전 Profile을 지웁니다.(Development와 Distribution 모두)

4. 거기서 다시 새로운 Profile을 생성합니다.

5. Xcode의 Organizer에 등록되어 있는 Provisioning Profile은 지웁니다.

6. 새로 생성한 Provisioning Profile을 다운받은후 두번 클릭으로 Organizer에 설치합니다.

 

이렇게 한뒤 디바이스에서 테스트 해보면 잘됩니다.

 

Provisioning Profile이라는 것은 Provisioning Portal에서 Certificate, Device, App ID 순서로 만들어진 결과물의 정보를 담습니다. 그러다 보니 세가지중에 하나라도 바뀌면 다시 Profile을 다시 생성해서 받아야 합니다. 위 에러의 경우 먼저 Profile을 받고 난다음 AppID에서 APNS를 활성화 시켜 Profile에는 이 정보가 포함되어 있지 않아 발생하는 문제였던 겁니다.

 

여기서 교훈은... Certificate, Device, App ID 에서 하나라도 수정되면 반드시 기존 Provisioning Profile을 지우고 재생성해서 받아 써야한다는 겁니다.

 

저... 이것때문에 완전 머리 쥐어 짰습니다. ㅜㅜ;;;;;

글쓴이 : 지돌스타(http://blog.jidolstar.com/725)

+ Recent posts