Swift: почему устройство меняется каждый раз при сборке / установке новой версии приложения?
Как многие из вас знают, для поддержки push-уведомлений в моем приложении мне нужно хранить две вещи в MySQL:
- идентификатор устройства
- токен устройства
который я соответственно получаю с:
let device = UIDevice.currentDevice().identifierForVendor!.UUIDString
let deviceTokenString: String = ( deviceToken.description as NSString ).stringByTrimmingCharactersInSet( characterSet ).stringByReplacingOccurrencesOfString( " ", withString: "" ) as String
Всегда, как вы знаете, каждый раз, когда приложение запускается, оно пытается зарегистрироваться в соответствующих push-уведомлениях таблицы MySQL, но если оно уже присутствует (его идентификатор устройства уже присутствует), то новая регистрация отбрасывается. В любом случае, я только что понял (как объяснено здесь), что идентификатор устройства меняется каждый раз, когда новая версия приложения переустанавливается на моем iPhone. Риск состоит в том, чтобы заполнить таблицу слишком большим количеством бесполезных записей. Есть ли способ сохранить тот же идентификатор устройства? Или какой самый умный способ справиться с этим?
2 ответа
Идентификатор устройства недоступен для кода проекта iOS. Единственная возможность удалить "мертвый" push-токен - это проверить, действителен ли push-токен. Это разумно сделать, когда вы отправляете push. Если он недействителен, удалите его из таблицы Mysql. Посмотрите на этот ТАК вопрос и ответ. Также важно проверить push-токены с точки зрения того, что Apple может применить санкции к тем разработчикам, которые отправляют множество push-запросов на мертвые токены.
Push-уведомление работает с двумя вещами: одна - это идентификатор устройства (идентификатор устройства / пользователя, который в основном реализуется владельцем приложения), а другая - токен GCM (который генерируется и поддерживается сервером Google GCM для каждой установки).
Идентификатор устройства может быть любым идентификатором, с помощью которого вы идентифицируете пользователя / устройство и т. Д. Токен устройства генерируется сервером Google, который обновляется каждый раз при установке приложения.
Теперь предположим, что приложение установлено на вашем телефоне, поэтому в вашей базе данных MySql будет 1 строка, содержащая ваш идентификатор устройства и токен GCM, GCM будет работать таким образом.
Теперь предположим, что вы переустанавливаете приложение, поэтому генерируется новый токен, но идентификатор устройства такой же. Таким образом, в коде на стороне сервера вам нужно проверить, существует ли идентификатор устройства в вашей таблице, если он существует, а затем сравнить новый токен и старый токен, если они совпадают, ничего не делать. если они отличаются, замените старый токен новым. Если идентификатор устройства отсутствует, то вы должны вставить. Таким образом, не будет ненужных записей.
Это то, что я понял из твоего вопроса. Надеюсь это поможет.