iOS13 APNS deviceToken 관련
안녕하세요. 이번에 iOS13 부터 deviceToken 가져올 때 이슈사항에 대해 공유드립니다.
이슈사항
iOS12 환경 deviceToken 데이터 형식
<fa26d6a1 711c10f2 fe15aa98 8beb4a5e 385bc0a4 d6e8b839 07b4f501 648722eb>
| cs |
iOS13 환경 deviceToken 데이터 형식
{length = 32, bytes = 0xfa26d6a1 711c10f2 fe15aa98 8beb4a5e ... 07b4f501 648722eb }
| cs |
대응
iOS 12 환경 대응을 위해 두가지 동시에 사용하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// 디바이스 토큰 획득
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// iOS 13에서 deviceToken 값이 변경되어 처리 로직 수정함.
NSString *tokenStr = @"";
if (@available(iOS 13.0, *)) {
NSUInteger length = deviceToken.length;
if (length != 0) {
const unsigned char *buffer = deviceToken.bytes;
NSMutableString *hexString = [NSMutableString stringWithCapacity:(length * 2)];
for (int i = 0; i < length; ++i) {
[hexString appendFormat:@"%02x", buffer[i]];
}
tokenStr = [hexString copy];
}
} else {
// iOS 13 이하
tokenStr =[deviceToken description];
}
tokenStr = [tokenStr stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" [ ] < > "]];
tokenStr = [tokenStr stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"DeviceToken : %@", tokenStr );
if (tokenStr) {
// 내부 저장
}
}
| cs |
Swift iOS13 대응 코드
1
2
3
4
|
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.map { String(format: "%02x", $0) }.joined()
// 나머지 로직.
}
| cs |
iOS13 에서 정상적으로 동작하는것 처럼 보이나 자꾸 이런식으로 내부가 바뀌는 것 같습니다. 앱 배포 전에 많은 확인이 필요할 것 같내요. 좋은하루 보내세요.
참고링크 :
댓글
댓글 쓰기