본문 바로가기
프로그래밍/iOS

Push Notification 적용하기 #2. 앱 수정

by 백룡화검 2012. 1. 13.
Registering for Remote Notifications
애플리케이션이 프로바이더로 부터 Remote Notifications(푸시 알림)을 받기 위해서는 다음 그림과 같은 일련의 등록 과정을 거쳐야 한다. 등록 과정은은 3단계로 나눠지며, 실제로 서비스 될 앱을 개발할 경우 등록 후 발급받은 디바이스 토큰을 프로바이더로 전달해주는 과정이 추가로 필요하다.

여기서는 애플리케이션이 푸시 알림을 사용할 수 있는 '최소한의' 과정만을 설명한다. 실제 프로젝트에서는 더욱 많은 소스 코드가 필요하다.

Local and Push Notifications Programming Guide, Apple


* 알림을 발생하는 서비스를 프로바이더(Provider)라 한다. 

registerForRemoteNotificationTypes
우선, 앱 자신이 APNS를 사용하겠다고 iOS와 APNS 모두에게 알려야 한다. 앱이 iOS에게 알려주면 나머지는 iOS가 다 해결해주니, 우선 iOS에게 알리자. ~AppDelegate.m의 application:didFinishLaunchingWithOptions 메서드에 다음과 같은 내용을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // APNS에 디바이스를 등록한다.
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert |
                                                                           UIRemoteNotificationTypeBadge |
                                                                           UIRemoteNotificationTypeSound)];
      
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
 UIApplication 의 registerForRemoteNotificationsTypes 메서드가 실행되면 iOS는 사용자에게 푸시 알림을 사용할 것인지를 묻는다. 사용자가 수락하면 iOS는 디바이스 및 앱의 정보를 APNS에게 전달하고 Device Token이라는 이름표를 전달받아 앱에게 알려준다. Device Token은 '어떤 디바이스의 어떤 앱' 임을 의미하는 64개의 바이트 조합이다.

didRegisterForRemoteNotificationsWithDeviceToken
APNS 등록이 성공하고 DeviceToken을 전달받으면 didRegisterForRemoteNotificationsWithDeviceToken 메서드가 실행된다. NSData 형식의 deviceToken 인자가 전달되는데, 실제 서비스라면 이 토큰을 사용자 정보와 함께 프로바이더에게 전달하여 관리를 할 필요가 있다. 여기서는 일단 로그를 통해 복사해서 사용한다.

1
2
3
4
5
6
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      NSLog(@"device token : %@", deviceToken);
     
    // Provider에게 DeviceToken을 전송한다.
    // [self sendProviderTokenString:[deviceToken bytes]];
}
참고로, APNS 등록이 실패하면 didFailToRegisterForRemoteNotificationsWithError 메서드가 실행된다.

Build for Running
푸시 알림을 수신했을 때 실행될 메서드의 등록은 프로바이더 개발 후로 미룬다. 빌드를 하고 앱을 실행해본다. 시뮬레이터는 푸시 알림을 지원하지 않으므로 실제 디바이스를 통해 앱을 실행한다. 첫 실행이라면 푸시 알림 허용 여부에 대한 얼럿을 확인할 수 있다. 승인을 터치하고, 콘솔에 표시된 디바이스 토큰을 복사해두자.



이제 프로바이더를 개발하여 앱에 알림을 보내 볼 차례다.


참고 자료
iOS Developer Library : 
 
Local and Push Notification Programming Guide
요즘에 보내기트위터에 보내기페이스북에 보내기미투데이에 보내기