Несколько токенов устройств для одного bundleId в режиме разработки iOS 9.1

Я использую Xcode 7.1.1 и iOS 9.1.
Столкнулся с этой странной проблемой. Мне нужно реализовать push-уведомления в приложении. Я успешно создал сертификаты и профили подготовки с включенными push-уведомлениями для режима разработки.

введите здесь описание изображения

Я сохранил тот же идентификатор пакета в своем приложении. Код тоже отлично написан в моем классе appdelegate

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let pushSettings = UIUserNotificationSettings(forTypes: .Alert, categories: nil)
    UIApplication.sharedApplication().registerUserNotificationSettings(pushSettings)
        UIApplication.sharedApplication().registerForRemoteNotifications()

    _ = UIApplication.sharedApplication().applicationIconBadgeNumber
    UIApplication.sharedApplication().cancelAllLocalNotifications()
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0


    return true
}

func application( application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {


    let characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" )

    let deviceTokenString: String = ( deviceToken.description as NSString )
        .stringByTrimmingCharactersInSet( characterSet )
        .stringByReplacingOccurrencesOfString( " ", withString: "" ) as String

    print( deviceTokenString )
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(deviceTokenString, forKey: "device_token")
    defaults.synchronize()


}
func application( application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError ) {

    print( error.localizedDescription )
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {

}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
}

Я успешно получаю токен устройства и печатаю его. Но всякий раз, когда я удаляю приложение, перестраиваю и переустанавливаю его, токен устройства меняется. Тем не менее, это остается прежним, пока я не удалю приложение. Но каждый раз, когда я удаляю, я получаю новый токен устройства. Этого не происходило в iOS 8.x . Я не знаю, почему это происходит на iOS 9.1.
В случае iOS 8.x я использую, чтобы получить тот же токен устройства, даже если я удаляю приложение. Кто-нибудь сталкивался с этой проблемой. Это нормально?
ПРИМЕЧАНИЕ. Я использую xcode 7.1.1, iPhone с iOS 9.1 и использую только сертификаты разработки и профиль подготовки.
Приветствуется любая помощь. Спасибо


person Rajan Maheshwari    schedule 15.11.2015    source источник
comment
Не связано с токеном устройства, но может помочь вам отслеживать устройство, если приложение удалено и переустановлено stackoverflow.com/questions/21878560/   -  person sbarow    schedule 15.11.2015
comment
сварить. Спасибо. Да, я знаю о цепочках ключей и UUID, но основная проблема заключалась в токенах устройств. В любом случае спасибо.   -  person Rajan Maheshwari    schedule 19.11.2015


Ответы (1)


Со ссылкой на: Руководство по программированию локальных и удаленных уведомлений

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

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

person teamnorge    schedule 15.11.2015
comment
Да, мы можем получить разные токены. Но с iOS 8 я каждый раз получал только один токен, даже если я удалял сборку и переустанавливал ее. - person Rajan Maheshwari; 19.11.2015
comment
@teamnorge Но несколько токенов действительны, если я отправлю уведомление на все устройства, они будут получены на одном устройстве, это ошибка. - person khaled; 02.12.2015
comment
@khaled Я не думаю, что там есть ошибка, вы сталкивались с такой ситуацией? Apple рекомендует использовать специальную службу обратной связи (developer.apple .com/library/ios/documentation/) для хранения токенов/уведомлений с истекшим сроком действия. Вы можете получить информацию о том, срок действия токенов истек, и в связи с регистрацией нового токена устройства при запуске приложения это обеспечивает вам довольно стабильный поток уведомлений. Конечно, есть некоторые исключения, но я не думаю, что вы действительно можете отправить два push-уведомления на одно и то же устройство. - person teamnorge; 02.12.2015
comment
Подтверждаю, что это правда! Apple отправляет два или даже три! push-уведомления с моего сервера в такой ситуации. Все токены действительны одновременно на одном устройстве. Очень надеюсь, что это касается только профиля разработчика. - person malex; 26.04.2016