STAFF BLOG STAFF BLOG

STAFF BLOG

2020.05.29 iOSアプリ

iOSアプリで、iOS13にバージョンアップしたらPUSH通知が届かなくなった

iOSアプリで、iOS13にバージョンアップしたらPUSH通知が届かなくなった

昨年から開発をしていたiOSアプリですが、iOS12の時は、PUSH通知が問題なく届いていましたが、iOS13になったらPUSH通知が届かなくなってしまいました。
色々検証した結果、デバイストークンが取得できていないのが原因だとわかりました。
どうもiOS13からデバイストークンのフォーマットが変わったようで、その形式を変更することで無事にデバイストークンの取得ができ、PUSH通知が届くようになりました。

iOS13におけるプッシュ通知に必要なデバイストークンの取得方法

直接的な原因は、プッシュ通知の利用登録成功時の Delegate メソッドの deviceToken が NSData 型から Data 型に変わったことです。

AppDelegate.swiftを修正

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
print("Received device token")
let tokenChars = (deviceToken as NSData).bytes.bindMemory(to: CChar.self, capacity: deviceToken.count)
var tokenString = ""
for i in 0..
tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
}
print("Received token data! \(tokenString)")
devToken = tokenString

let ud = UserDefaults.standard
ud.set(devToken,forKey: "devToken")
ud.synchronize()
}

以前のiOSでは、 [deviceToken description] で取得される値が、
<56843999ft 1e4389433 …e445rtfer> というような先頭と末尾を <> で括られていました。
ですが、プッシュ通知の利用登録成功時の Delegate メソッドの deviceToken が NSData 型から Data 型に変わったので

tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])

上記の書き方に変更した所、無事にデバイストークンが取得できました。

関連記事