

STAFF BLOG
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]])
上記の書き方に変更した所、無事にデバイストークンが取得できました。
CATEGORY
関連記事
2021.01.10 動画制作
After Effectsでアニメーションをループさせる
2021.01.10 動画制作
Premiere Proでぼかしをトラッキングする
2021.01.10 動画制作
Premiere Proで作成した映像をMedia Encoderで書き出すとLUTが反映されていない時の解決方法
2021.01.10 動画制作
Premiere Proでモーションブラーをかける
2021.01.10 動画制作
Premiere ProにLUTを追加する
2020.11.25 PHPプログラム
Instagram Graph APIを使ってインスタグラムの投稿画像をWebサイトに埋め込む方法1