1

Я заметил, что некоторые устройства не генерируют токен устройства для push-уведомления. Я использую следующий код для создания устройства токена и реализован didRegisterForRemoteNotificationsWithDeviceToken методаМаркер устройства не генерируется для некоторых устройств?

 var types: UIUserNotificationType = UIUserNotificationType.Badge | 
      UIUserNotificationType.Alert | 
      UIUserNotificationType.Sound 
     var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil) 
     application.registerUserNotificationSettings(settings) 
     application.registerForRemoteNotifications() 

я получаю маркер устройства для некоторых devices.However я думал маркер устройства не был сгенерирован для некоторых устройств из-за отсутствие интернета connnection. Конечно, я отключил подключение к Интернету и убедился, что это моя проблема, но он успешно генерирует токен?

В моих знаниях мое приложение запрашивает маркер устройства с сервером яблока ...

Почему это happening.And как устройство Токена генерируется?

ли я на самом деле не нужно подключение к Интернету для создания устройства маркеров

ответ

0

Убедитесь, что вы не случайно нажать «Не разрешать», когда был показана диалоговое разрешения толчок уведомления. Если это так, вам нужно будет перейти к настройкам и включить push-уведомления для своего приложения вручную, а затем вы получите токен устройства.

Для проблемы с подключением к Интернету: для запроса токена устройства требуется подключение к Интернету, чтобы зарегистрировать ваше устройство в APNS. Но как только вы зарегистрировали свое устройство, все другие последующие вызовы будут давать вам маркер устройства без необходимости подключения к Интернету, как это не имеет доступа к серверу APNS:

Вы можете посмотреть на него:

Запросив токен устройства и передавая его провайдеру каждые времени запуска вашего приложения, вы помогаете гарантировать, что у провайдера есть текущий токен для устройства. Если пользователь восстанавливает резервную копию на устройстве или компьютере , отличном от устройства резервного копирования, которое было создано для (например, пользователь переносит данные на новое устройство или компьютер), он или она должна запустить приложение не реже одного раза для получения уведомлений . Если пользователь восстанавливает данные резервного копирования на новое устройство или компьютер или переустанавливает операционную систему, томеню устройства изменяется. Более того, никогда не кэшируйте токен устройства и не передавайте его поставщику ; всегда получайте токен от системы, когда вам это нужно. Если ваша заявка была ранее зарегистрирована, вызывается registerForRemoteNotificationTypes: результаты в операционной системе передают токен устройства делегату сразу без дополнительных дополнительных накладных расходов.

+0

спасибо, теперь это ясно ... с часами отладки –

3

Интерент соединение необходимо зарегистрировать устройство для remotenotification

var types: UIUserNotificationType = UIUserNotificationType.Badge | 
     UIUserNotificationType.Alert | 
     UIUserNotificationType.Sound 
    var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil) 
    application.registerUserNotificationSettings(settings) 
    application.registerForRemoteNotifications() 

выше код работает только если у вас есть интернет

Что вы можете сделать, если это когда и получил маркер устройства в этой функции didRegisterForRemoteNotificationsWithDeviceToken

Сохраните его в NSUserDefault, теперь в следующий раз проверьте, есть ли у вас подключение к Интернету, чем этот метод, если не получите devic e токен от NSUserDefault. Для проверки Internetconnection вы можете использовать класс достижимости получил его отсюда https://github.com/ashleymills/Reachability.swift

+0

для информации ... теперь он позволяет мне очистить после отладки –

+0

Подключение к Интернету !! Не могу поверить, что я пропустил это. :( – jithin

0

Добавить метод:

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) 
{ 
    print("application:didFailToRegisterForRemoteNotificationsWithError: %@", error) 
} 

Таким образом, вы можете узнать, что ошибка. У меня уже были схожие проблемы.