Можно использовать практически любой символ, включая «-» и «.», если серийный номер остается уникальным. Специальные символы, такие как '\', должны быть правильно экранированы, хотя они могут быть несовместимы с вашей базой данных или могут вызвать другие проблемы, если они не обрабатываются должным образом в другом месте вашего кода.
Я только что попробовал проход со следующим серийным номером, и он без проблем добавился в Passbook.
"serialNumber":"[]{}-_)(*&^%$#@!`~+=|\\\/?.><,:;"
Символы в кодировке UTF8 также подходят:
"serialNumber":"\u9127\u6a02\u611a" // Chinese characters 鄧樂愚
Что касается максимальной длины, я не знаю никаких ограничений, хотя поэкспериментировать было бы довольно просто.
Этот сериал из 400 символов тоже нормально проглатывается.
"serialNumber":"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
Я бы рекомендовал не использовать какой-либо пользовательский ввод для серийного номера, так как это может привести к неуникальным коллизиям и открыть вас для инъекций. Кроме того, соблюдение стандартов XML — неплохая практика, позволяющая избежать каких-либо проблем, если вы измените свою архитектуру (скажем, на решение веб-сервиса, такое как AWS DynamoDB) в будущем. Кодировка Base64 вашего серийного номера обеспечит широкую совместимость.
Серийный номер также может использоваться для хранения метаданных в проходе.
"serialNumber":"UniqueID|data1|data2|data3|etc."
person
PassKit
schedule
18.01.2013