Метод didUpdate pushCredentials вызывается медленно? - PullRequest
0 голосов
/ 28 мая 2020

В нашем приложении мы делаем следующее: если включено уведомление pu sh, мы отправляем токен на наш сервер. Но sendTokenId () вызывается до didUpdate pushCredentials. Почему это происходит? Когда выполняется sendTokenId (), tokenId равен нулю. Через некоторое время учетные данные pu sh обновляются. Это время tokenId присутствует.

   func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType)
    {

      \\ code to get tokenId
    }
    func sendTokenId()
    {
        \\ code to send token to server
    }

Кто-нибудь, пожалуйста, помогите мне исправить это. Заранее спасибо.

1 Ответ

1 голос
/ 28 мая 2020

didUpdate pushCredentials - метод делегата протокола PKPushRegistryDelegate. Есть причина, по которой он сделал метод делегата, потому что генерация токена устройства - это асинхронная задача , когда ваше приложение регистрируется для уведомления, создавая PKPushRegistry и указывая desiredPushTypes iOS, разговаривает с сервисом APNS для генерации уникального токена устройства при получении действительного токена устройства iOS доставляет его вашему приложению, вызывая соответствующий метод делегата в вашем коде, который вы затем передаете обратно своему серверу, и ваш сервер использует его для отправки уведомления на указанный c устройство.

Цитирование Документы Apple

Каждый раз, когда ваше приложение запускается, оно должно регистрироваться в APN. Способы использования различаются в зависимости от платформы, но во всех случаях это работает следующим образом:

  1. Ваше приложение запрашивает регистрацию в APN.
  2. При успешной регистрации APN отправляет на устройство токен устройства c, указывающий на приложение.
  3. Система доставляет устройство в ваше приложение, вызывая метод в
    делегате вашего приложения. .
  4. Ваше приложение отправляет токен устройства
    поставщику приложения.

Наконец, согласно вашему вопросу,

Метод 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
    }

Надеюсь, это поможет

...