iOS Данные цепочки для ключей будут сохраняться после удаления и переустановки приложения? - PullRequest
0 голосов
/ 02 марта 2020

Как известно, получение уникального идентификатора на устройствах iOS запрещено Apple. Но иногда нам нужно идентифицировать устройства, например, получить бонус, когда приложение впервые установлено с единственным пользователем. Мы не хотим подписывать (зарабатывать бонус) нескольких пользователей на одном устройстве.

Итак, мы получили vendorID с устройства и сохранили эти данные в цепочке для ключей (vendorID время от времени менялся, но мы не хотим менятьID). После этого мы проверяем эти данные на цепочке для ключей. Я читаю эту ветку iOS автоудаление элементов цепочки для ключей после удаления , что связанные данные цепочки для ключей будут удалены после удаления приложения.

Но когда я пробую этот сценарий. Мои данные цепочки для ключей не удаляются, а данные цепочки для ключей остаются неизменными после удаления.

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

Данные цепочки для ключей будут удалены после удаления?

Чтобы посмотреть на мою функцию сохранения данных цепочки для ключей.

class func getUniqueDeviceID() -> String {
    guard let uniqueDeviceId = KeychainKeeper.shared.uniqueDeviceID else {
        let deviceId = (UIDevice.current.identifierForVendor?.uuidString)~
        KeychainKeeper.shared.uniqueDeviceID = deviceId
        return deviceId
    }
    return uniqueDeviceId
}

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

1 Ответ

0 голосов
/ 02 марта 2020

Данные цепочки для ключей теперь всегда сохраняются.

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

Проверьте этот вопрос .

Существует очень простой способ через UserDefaults :

func clearKeychainIfWillUnistall() {
let freshInstall = !UserDefaults.standard.bool(forKey: "alreadyInstalled")
 if freshInstall {
    KeychainKeeper.shared.clear()
    UserDefaults.standard.set(true, forKey: "alreadyInstalled")
  }
}

Назовите это AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  self.clearKeychainIfWillUnistall()
}

Самый простой обходной путь, который я знаю. Я надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...