2016. 10. 7. 11:32ㆍmobile/ios
ios도 모르고 하이브리드 앱 개발하기 [ 21.3 APNS 구현 - APNS 클라이언트 만들기 (IOS 구성) ]
필자는 APNS를 선행작업을 제외한 3단계로 구분하여 포스팅 할 계획이다.
21.2 APNS 구현 - APNS 서버 만들기 (프로바이더 구성)
21.3 APNS 구현 - APNS 클라이언트 만들기 (IOS 구성)
마지막으로 클라이언트를 구성해보자.
AppDelegate.m 파일을 수정하면 된다.
didFinishLaunchingWithOptions 수정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/* S APNS 등록 */
// iOS 8.0 이상인 경우
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
UIUserNotificationSettings *pushRegistration = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:pushRegistration];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}
// 어플리케이션 실행시 뱃지를 0으로 해준다.
application.applicationIconBadgeNumber = 0;
/* E APNS 등록 */
return YES;
} |
cs |
11# : IOS 8.0 이상만 사용가능한 앱이라면 주석처리, 그렇지 않으면 Project > General > Deployment Target을 7.x로 설정
15# : 뱃지를 0으로 설정함, 앱 최초 실행시 PUSH 동의 여보를 한번만 묻는다고 한다.
디바이스 토큰 가져오기
1
2
3
4
5
6
7
8
9 |
/* S 디바이스 토큰 가져오기 */
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"Token : %@", token);
NSLog(@"deviceToken : %@", deviceToken);
}
/* E 디바이스 토큰 가져오기 */ |
cs |
3# : 사용자가 알림을 승인하면 deviceToken 에서 불필요한 <, >, 공백을 제거한 후 토큰을 가져온다.
5# : Console에 찍히는 Token 값을 서버에 deviceToken 변수에 대입함
APNS 동의 여부를 묻는 알림창의 확인버튼 또는 허용 안 함 버튼을 클릭시 콜백(?) 처리하는 부분
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
/* S APNS 알림창 버튼 클릭 컨트롤 */
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
if ((notificationSettings.types & 1) == UIUserNotificationTypeNone) {
NSLog(@"user selected NO");
} else {
NSLog(@"user selected YES");
[application registerForRemoteNotifications];
}
}
#endif
/* E APNS 알림창 버튼 클릭 컨트롤 */ |
cs |
토큰 가져오기를 실패했을 경우 실행된다.
1
2
3
4
5
6
7
8
9 |
/* S 디바이스 토큰 가져오기 ERROR */
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
#if !TARGET_IPHONE_SIMULATOR
NSLog(@"Registration Error : %@", error);
#endif
}
/* E 디바이스 토큰 가져오기 ERROR */ |
cs |
4# : 시뮬레이터에서는 테스트 불가능하기 때문에 분기함
앱이 실행중 백그라운드 or 포그라운드 상태일 경우 didReceiveRemoteNotification 이 호출
1
2
3
4
5
6 |
/* S APNS 수신 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
}
/* E APNS 수신 */ |
cs |
모든 준비는 끝났다.
테스트 방법 !!!!
1. 디바이스에서 앱을 실행시키고 동의한 후 Console 에 Token 값을 확인한다.
2. 서버의 jsp 파일의 deviceTocke 변수에 Token 값을 대입한다.
3. 디바이스 화면을 끄거나 앱을 종료시킨다.
4. 서버를 기동한다. (start)
5. http://localhost:8080/IOSweb/iosApns.jsp 를 호출한다.
6. 디바이스에 Push가 오는지 확인한다.
끝
Received fatal alert: certificate_unknown 애러를 만날 수 도 있다.
그럴 땐 아래 포스팅 참고, 지금 미리 봐두는것도 나쁘지 않음 ^^
ios도 모르고 하이브리드 앱 개발하기 [ 21.3 APNS 구현 - Received fatal alert: certificate_unknown 오류 ]
* 경고 IOS에 무지한 상태에서 구글링만으로 앱 개발 및 포스팅이 진행됨 누구나 따라할 수 있겠지만 결코 완벽한 정답이 아닐 수 있음 아주 주관적인 입장에서의 포스팅임 |