iPhone Dev2010.10.07 10:57
APNS 인증서 파일(p12)을 만드는 방법입니다.

1. Member Center - Provisioning Portal 에서 New App ID 를 만든다.



Description : 새로 생성 할 App ID의 이름을 정합니다.
Bundle Seed ID (App ID Prefix) : Generate New 를 선택 합니다.
Bundle Identifier (App ID Suffix) : 번들 ID를 설정합니다. com.domainname.appname 형식으로 하라고 하네요 :)

모든 정보를 입력 하신 뒤에 Submit 을 클릭 하시면 새로운 App ID가 생성 됩니다.



* 생성 된 App ID 에서 Apple Push Notification service 의 state 가 비활성(노란색) 되 있습니다.

2. Apple Push Notification service 의 state 를 활성화



생성 된 App ID 에서 Configure 를 클릭 합니다.

Push SSL Certificate 는 Development, Production 두 가지가 있습니다.
말 그대로, Development 는 앱스토어 등록 전에 개발용으로 사용하실 인증이며, Product 는 앱스토어에 등록 된 후 사용하실 인증입니다. 각각의  Push SSL Certificate 의 state 를 활성화 하기 위하여 Enable for Apple Push Notification Service 를 체크하신 뒤, Configure 를 클릭 합니다.



Configure를 클릭 하시면, Generate a Certificate Signing Request 라는 새 창이 뜹니다.



이 화면에서 Continue 를 클릭 하여 위자드를 진행하시고, Submit Certificate Signing Request 화면으로 넘어갑니다.



이번 프로세스가 APNS 인증서를 추출하는 모든 과정 중 가장 중요한 부분이라고 할 수 있습니다. 여기서 Select the Certificate Signing request (CSR) file that you saved to your disk. 라는 문구가 나오며, 파일을 선택하여 업로드 할 수 있는 submit 버튼이 나오는데요, 업로드 하실 파일은 바로 CertificateSigningRequest.certSigningRequest 파일입니다. 익숙하지만 너무 길어서 좀 낯선.. 이 파일은 맴버 센터에서 Certificates 를 하기 위해 진행할 때 만드셨던 파일이죠.

이 부분이 가장 중요한 이유는, 이 때  CertificateSigningRequest.certSigningRequest 파일을 잘 못 업로드 하는 경우 APNS 인증서와 Certificates 됐던 인증 키(개인 키)가 매치가 되지 않아 인증서 추출을 올바르게 할 수 없기 때문입니다.

혹시, 이 CertificateSigningRequest.certSigningRequest 파일을 이전에 Save 해 두신 게 없으시다면 방법은 2가지 밖에 없습니다.
그 첫번째는 Certificates 부터 아예 다시 진행하시는 방법입니다. 이 방법은 계정 인증부터 다시 하게 되니 이미 Provisioning Profile 이 배포 된 모든 프로젝트를  Provisioning Profile 을 업데이트 하신 뒤 다시 빌드해야 하는 리스크를 감수해야 합니다.
두 번째 방법은 CertificateSigningRequest.certSigningRequest 파일만 새로 만드는 것인데요. 이 방법은 아무런 리스크는 없지만 처음 Certificates 를 진행하면서 입력하신 정보를 정확하게 입력해야 만 APNS 인증서와 Certificates 됐던 인증 키(개인 키)가 매치 된다는 점을 유의하셔야 합니다.
[CertificateSigningRequest.certSigningRequest 생성]




그럼, 다시 Submit Certificate Signing Request 화면으로 가서 CertificateSigningRequest.certSigningRequest 파일을 업로드 해 보겠습니다.



CertificateSigningRequest.certSigningRequest  파일을 선택 하신 뒤 Generate 를 하시면,  APNs SSL Certificate has been generated. 되며 Push SSL Certificate 의 State 가 Enabled로 활성화 되 있는 것을 확인 하실 수 있습니다.



이렇게 Push SSL Certificate 가 활성화 된 뒤, Action 에서 Download 를 통해 인증서 파일(aps_developer_identity.cer, aps-product-identity.cer)을 받으신 뒤 실행 하시면 키체인 접근에 인증서가 등록 되고, 개인 키와 물려 있는 화면을 확인 하실 수 있습니다.



여기서 APNS 인증서와, 물려있는 개인 키를 함께 선택 하신 뒤, 우클릭을 하시면 컨텍스트 메뉴 중에 2개 항목 보내기.. 항목이 있습니다.



클릭하신 뒤 개인 정보 교환(.p12) 형식으로 저장 하시면 



비밀번호를 설정 한 뒤 원하시는 곳에 저장하실 수가 있습니다.

* 이렇게 추출 된 인증서는 서버 프로그램을 하실 때, 사용 되니 APNS 가 필요한 어플을 구상하신다면 반드시 필요합니다 :)
Posted by Min-gu, Kim
iPhone Dev2010.09.06 17:27
APNS(Apple Push Notification Service)를 하기 위해서, 어플을 설치한 각 디바이스에서 Device Token 을 알아야 하는데요.

이 Device Token 을 알 수 있는 방법은 다음과 같습니다.

1. 어플 사용자가 APS(Apple Push Service) 를 이용하겠다는 동의를 해야 한다.

2. 어플리케이션 delegate 에서 UIApplicationDelegate 내 함수 (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 을 구현한다.


바로 2번 항목에서 (NSData *)deviceToken 이라는 파라미터로 Device Token 이 들어옵니다.  이 때, Device Token 은 퍼포먼스 때문에 바이너리 포맷으로 전달 된다고 하네요.

1. APS Register

어플 사용자가 APS 를 이용하겠다는 동의를 해야 한다고 했는데요, 이를 위해서 -(BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 에서 다음 코드를 추가 하시면 어플이 설치 되고 처음 실행 될 때 APS 를 이용하겠는지의 여부를 묻게 됩니다. (이 메시지는 처음에만 묻고, 그 뒤로는 다시 묻지 않습니다. 설정 변경은 일반 설정에서 On / Off 하실 수 있습니다.)
코드

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

[window addSubview:[nav view]];

    [window makeKeyAndVisible];

// APS Register

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:

UIRemoteNotificationTypeAlert |

UIRemoteNotificationTypeBadge |

UIRemoteNotificationTypeSound ];

return YES;

}

설정 변경



2. Device Token 얻기

어플리케이션 delegate 에서 UIApplicationDelegate 내 함수 (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 을 구현을 하면, 어플이 처음 실행 될 때 다음 코드를 타게 됩니다. 이 때, Device Token 을 얻으 실 수 있습니다. (전역으로 두셨다가 필요하실 때 쓰시면 되겠네요)

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

    NSLog(@"Device Token : %@" ,deviceToken);

}


Posted by Min-gu, Kim

티스토리 툴바