안녕하세요.
이번 글에서는 iOS13 환경에서 deviceToken을 가져올 때 달라진 점에 대해서 공유하려고 합니다.
달라진 점
iOS12 환경에서는 deviceToken을 가져오는 메소드에서 deviceToken 파라미터 데이터 형식은
<124686a5 556a72ca d808f572 00c323b9 3eff9285 92445590 3225757d b83997ba>
iOS13 환경에서는
{length=32,bytes=0x91e27cd9ddf20c69da8fa650e2a06f55...e60b100d99d60adf}
로 변경되었습니다.
대응
iOS12 환경에서 deviceToken 데이터를 String으로 아래의 방법으로 가공하였다면,
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var deviceTokenString = String(format: "%@", deviceToken as CVarArg)
deviceTokenString = deviceTokenString.replacingOccurrences(of: "<", with: "")
deviceTokenString = deviceTokenString.replacingOccurrences(of: ">", with: "")
deviceTokenString = deviceTokenString.replacingOccurrences(of: " ", with: "")
...
}
iOS13 환경에서는 Base16-encoded / hexadecimal string 표현으로 변환해야 합니다.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.map { String(format: "%02x", $0) }.joined()
...
}
map메소드를 이용하여 Data의 각 바이트를 16진수로 String으로 만들고, joined()을 이용하여 단일 문자열로 변환하는 방식입니다.
마무리
iOS12 환경에서는 푸시기능이 잘 작동하였는데, iOS13버전 대응하면서 디바이스 토큰 데이터 구조가 변경되었고, 갑작스럽게 대응하느라 미리 대응했으면 좋았을텐데에 대한 아쉬움이 남네요.
iOS14버전 부터는 미리 미리 대응하는 습관을 길러야겠네요:)
'iOS Trouble Shooting' 카테고리의 다른 글
[iOS] iOS13 StatusBar Crash 이슈 (0) | 2020.01.05 |
---|---|
[iOS] UITableView에서 리로드할 때 스크롤 포지션 어긋나는 이슈 (0) | 2020.01.05 |