didUpdate pushCredentials
- метод делегата протокола PKPushRegistryDelegate
. Есть причина, по которой он сделал метод делегата, потому что генерация токена устройства - это асинхронная задача , когда ваше приложение регистрируется для уведомления, создавая PKPushRegistry
и указывая desiredPushTypes
iOS, разговаривает с сервисом APNS для генерации уникального токена устройства при получении действительного токена устройства iOS доставляет его вашему приложению, вызывая соответствующий метод делегата в вашем коде, который вы затем передаете обратно своему серверу, и ваш сервер использует его для отправки уведомления на указанный c устройство.
Цитирование Документы Apple
Каждый раз, когда ваше приложение запускается, оно должно регистрироваться в APN. Способы использования различаются в зависимости от платформы, но во всех случаях это работает следующим образом:
- Ваше приложение запрашивает регистрацию в APN.
- При успешной регистрации APN отправляет на устройство токен устройства c, указывающий на приложение.
- Система доставляет устройство в ваше приложение, вызывая метод в
делегате вашего приложения. . - Ваше приложение отправляет токен устройства
поставщику приложения.
Наконец, согласно вашему вопросу,
Метод didUpdate pushCredentials вызывается медленно?
Он не вызывается медленно, он вызывается асинхронно, поскольку он был разработан для этого :)
Так что измените свой код на,
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType)
{
//get token here from pushCredentials
// call sendTokenId
self.sendTokenId(pass_token_you_recieved)
}
func sendTokenId(_ tokenId: Data)
{
\\ code to send token to server
}
Надеюсь, это поможет