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

Я получаю несколько уведомлений для одного и того же приложения ..

если изменится как удалить старую с нашего сервера ..

Вот мое наблюдение на устройстве iOS 9

1.Есть два поля в DB APPId и Device token. Если я удалил приложение и снова установил его на том же устройстве, токен устройства изменится.

2. Я тестировал другое приложение на том же устройстве. Токен устройства отличается даже на том же устройстве.

Я получаю 3 уведомления на одно и то же устройство, даже если я удалил первый токен устройства из моей БД…. Я до сих пор не понял причину нескольких уведомлений.

Какие могут быть возможные причины?


person siva krishna    schedule 20.01.2016    source источник
comment
@Krishna Вы можете вкратце рассказать мне о вашем вопросе? поэтому я предоставлю вам точное решение.   -  person Pavan Gandhi    schedule 20.01.2016
comment
@PavanGandhi Допустим, приложение установлено впервые (токен устройства вставлен в нашу базу данных). если пользователь удалил приложение и установил его снова .. Изменился ли токен устройства? если он изменится, как удалить старый из моей БД?   -  person siva krishna    schedule 20.01.2016
comment
просто следуйте решению, которое я вам предоставлю, если столкнетесь с какой-либо проблемой, а затем сообщите мне   -  person Pavan Gandhi    schedule 20.01.2016
comment
Вы входите в несколько учетных записей с одного устройства?   -  person technerd    schedule 20.01.2016
comment
@technerd Нет, я спрашиваю об удалении / переустановке.   -  person siva krishna    schedule 20.01.2016


Ответы (4)


Device token - это изменение в следующих условиях.

  • Если пользователь восстанавливает данные резервной копии на новое устройство.
  • Переустанавливает приложение

Поэтому я предлагаю обновить сервер новым токеном.

Каждый раз, когда приложение запускается в didRegisterForRemoteNotificationsWithDeviceToken, вы должны вызывать api, который обновляет токен устройства в случае изменения.

В своей БД создайте еще два поля как device token и APPId, поэтому обновите device token относительно APPId.

Получите APPId или уникальный идентификатор устройства из связки ключей устройства и отправьте его на свой сервер с device token так, при обновлении сервера device token относительно APPId.

keychain значение никогда не изменится в следующих выше условиях.

Чтобы получить значение Связки ключей, следуйте Связке ключей

// MARK: - Push Notification Delegate Methods.
    func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

        //send this device token to server

        let token = String(data: deviceToken.base64EncodedData(), encoding: .utf8)?.trimmingCharacters(in: CharacterSet.whitespaces).trimmingCharacters(in: CharacterSet(charactersIn: "<>"))

        //Save device to UserDefaults
        let defaults = UserDefaults.standard
        defaults.set(token, forKey: "DeviceToken")
        defaults.synchronize()

        print("token is ---\(token)")

        print("AppId ----\(getUniqueDeviceIdentifierAsString)")

        //Send token value and AppId to server

    }

     var getUniqueDeviceIdentifierAsString : String {

        let appname =  Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String

        var strApplicationUUID: String? = KeychainWrapper.standard.string(forKey: appname)
        if strApplicationUUID == nil {
            strApplicationUUID = UIDevice.current.identifierForVendor?.uuidString
            _ = KeychainWrapper.standard.set(strApplicationUUID!, forKey: appname)
        }

        return strApplicationUUID!
    }
person Nikhlesh Bagdiya    schedule 12.08.2017

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

person Akshay Patel    schedule 20.01.2016
comment
Вместо того, чтобы удалять токен устройства с сервера, мы можем отключить push внутри приложения самостоятельно (во время выхода из системы). - person Hemang; 20.01.2016
comment
@Akshay Patel Это нормально при входе / выходе. мне нужно в случае удаления и повторной установки приложения? - person siva krishna; 20.01.2016
comment
когда пользователь устанавливает приложение и входит в систему после установки, пользователь удалил приложение после того, как этот пользователь снова перейдет к установке приложения. В этом случае токен устройства останется прежним или изменен. - person mahesh sharma; 12.04.2016

@Krishna: Токен устройства остается таким же, как вы установили приложение в первый раз и удалили его, и вы снова установили это приложение на то же устройство.

если вы используете новое устройство во второй раз, токен устройства будет другим.

Примечание: просто сообщите внутреннему разработчику, чтобы он сделал следующее:

  1. ApI, который вы используете для вставки токена устройства в базу данных, так как ему нужно проверить, является ли токен устройства diff, и обновить его. в противном случае просто используйте любой проход с веб-службой.

Его работа нормально.

person Pavan Gandhi    schedule 20.01.2016
comment
Сначала вам нужно проверить, существует ли токен устройства пользователя устройства или нет. если нет, добавьте токен устройства этих пользователей. если есть, то получите подробную информацию и обновите токен устройства. - person Pavan Gandhi; 20.01.2016
comment
мы не проверяем UserId (даже если пользователь не вошел в систему, нам нужен токен устройства). Меня только что проверили в моей БД. В БД APPId и токен устройства есть два поля. Если я удалил приложение и если установил его снова на том же устройстве, токен устройства изменится. - person siva krishna; 20.01.2016
comment
Я получаю 3 уведомления на одно и то же устройство, даже если я удалил первый токен устройства из моей БД…. Я до сих пор не понял причину нескольких уведомлений. - person siva krishna; 20.01.2016

iOS9 и новее, токен устройства может изменяться каждый раз при повторной установке приложения. Таким образом, лучший способ - хранить (обновлять или вставлять в БД) токен устройства при каждом запуске.

person Kumar KL    schedule 31.03.2016