Мастер-лицензия – это оффлайн-лицензия, с которой можно использовать мобильные SDK без ограничений по bundle_id, в отличие от обычных лицензий. Для получения мастер-лицензии нужно создать пару ключей, как описано ниже. Отправьте нам публичный ключ по электронной почте, и вскоре после этого мы отправим вам мастер-лицензию.
Вашему приложению нужно будет подписать свой bundle_id приватным ключом. Мобильные SDK проверяют подпись с помощью публичного ключа из мастер-лицензии. Действие таких лицензий ограничено по времени.
В этом разделе описано, как создавать приватный и публичный ключи.
Чтобы создать приватный ключ, последовательно запустите следующие команды:
openssl genpkey -algorithm RSA -outform DER -out privateKey.der -pkeyopt rsa_keygen_bits:2048
# for MacOS
base64 -i privateKey.der -o privateKey.txt
# for Linux
base64 -w 0 privateKey.der > privateKey.txtВы получите два файла:
privateKey.der – приватный ключ .der;
privateKey.txt – privateKey.der в кодировке base64. Содержимое этого файла используется в качестве подписи bundle_id хостового приложения.
Спецификация команд OpenSSL: https://www.openssl.org/docs/man1.1.1/man1/openssl-pkcs8.html
Чтобы создать публичный ключ, последовательно запустите следующие команды:
openssl rsa -pubout -in privateKey.pem -out publicKey.pub
base64 -w 0 publicKey.pub > publicKey.txtВы получите публичный ключ publicKey.pub. Отправьте его нам по электронной почте. В ответ мы пришлем вам лицензию.
Инициализация SDK:
OZSDK(licenseSources: [LicenseSource], masterLicenseSignature: String? = nil, completion: @escaping ((LicenseData?, LicenseError?) -> Void))Установка лицензии:
setLicense(licenseSource: LicenseSource, masterLicenseSignature: String? = nil)Перед инициализацией SDK создайте закодированную base64 подпись для bundle_id хостового приложения с помощью приватного ключа.
Пример создания подписи:
private func getSignature() -> String? {
let privateKeyBase64String = "содержимое файла privateKey.txt"
guard let data = Data(base64Encoded: privateKeyBase64String, options: [.ignoreUnknownCharacters]) else {
return nil
}
let sizeInBits = data.count * 8
let keyDict: [CFString: Any] = [
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPrivate,
kSecAttrKeySizeInBits: NSNumber(value: sizeInBits)
]
var error: Unmanaged<CFError>?
guard let secKey = SecKeyCreateWithData(data as CFData, keyDict as CFDictionary, &error) else {
return nil
}
guard let bundleID = Bundle.main.bundleIdentifier else {
return nil
}
guard let signature = SecKeyCreateSignature(secKey,
.rsaSignatureMessagePKCS1v15SHA512, // Это критично!!!!
Data(bundleID.utf8) as CFData,
&error) else {
return nil
}
return (signature as Data).base64EncodedString()
}Передайте подпись как параметр masterLicenseSignature во время инициализации SDK или установки лицензии.
Если подпись невалидна, инициализация продолжится по стандартной схеме: проверка включенных в лицензию bundle_id.
Для работы SDK требуется лицензия. Сгенерируйте тестовую лицензию самостоятельно здесь (внимание, страница на английском языке) или свяжитесь с нами по email для выпуска продуктивной лицензии. Для подготовки лицензии потребуется bundle id. Есть два способа добавить лицензию в проект:
Переименуйте файл в forensics.license и поместите его в проект. Прописывать путь в этом случае не нужно.
Обновление лицензии для уже работающего приложения или в том случае, если вы хотите держать лицензию вне проекта:
OZSDK(licenseSources: [.licenseFileName(“forensics.license”)]) { licenseData, error in
if let error = error {
print(error)
}
}или
OZSDK(licenseSources: [.licenseFilePath(“path_to_file”)]) { licenseData, error in
if let error = error {
print(error)
}
} LicenseSource – источник лицензии, LicenseData – информация о лицензии. В этот метод встроена проверка наличия активной лицензии, если такая лицензия есть – будет использоваться она, а не та, путь к которой вы указали. Для принудительной замены лицензии используйте метод setLicense.
Если при обработке лицензии возникнут ошибки, вы получите сообщение с описанием этих ошибок. Если ошибок нет, система выведет данные о лицензии. Вы также можете запросить эти данные с помощью OZSDK.licenseData.
License error. License at (your_URI) not found
Отсутствует файл лицензии. Проверьте наименование и путь к файлу.
License error. Cannot parse license from (your_URI), invalid format
Файл лицензии поврежден. Пожалуйста, отправьте его нам по электронной почте.
License error. Bundle company.application.id is not in the list allowed by license (bundle.id1, bundle.id2)
Идентификатор приложения отсутствует в списке разрешенных для данной лицензии идентификаторов. Проверьте написание, если все корректно, нужна новая лицензия.
License error. Current date yyyy-mm-dd hh:mm:ss is later than license expiration date yyyy-mm-dd hh:mm:ss
Срок действия лицензии истек. Пожалуйста, свяжитесь с нами.
License is not initialized.
Лицензия не устанавливалась. Добавьте лицензию в проект.