Поэтому я хотел бы сделать бесплатное приложение с загруженной полной функциональностью. Профессиональная функциональность будет отключена, пока приложение не обнаружит лицензионный профессиональный ключ. И, конечно же, я хотел бы, чтобы ключ pro проверял свою лицензию с помощью LVL. Хотя я знаю, как все делать правильно до этого момента, я не знаю, как заставить ключ pro связываться с приложением, чтобы оно включало функциональные возможности pro.
Вот основной код приложения (com.test.mainapp):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = getApplicationContext();
final PackageManager pacman = getPackageManager();
final int signatureMatch = pacman.checkSignatures(getPackageName(),
"com.test.mainapp_key");
if (signatureMatch == PackageManager.SIGNATURE_MATCH) {
Toast.makeText(context, "Pro key detected!", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(context, "Free version", Toast.LENGTH_SHORT).show();
}
}
Хотя это не позволяет другим делать поддельные ключи для моего приложения, они по-прежнему могут делиться ключевым приложением в Интернете с другими, и оно будет работать. Поскольку мы не можем выполнить проверку LVL из другого приложения, я бы хотел, чтобы приложение лицензионного ключа проверяло свою собственную лицензию, и если оно правильное, только тогда пользователь получает профессиональные функции. Как сделать так, чтобы приложение с лицензионным ключом и основное приложение взаимодействовали друг с другом?
Функциональность, которую я пытаюсь здесь получить, аналогична, например, Titanium Backup.
mySecretKey
. Вы получаете идентификатор устройства в виде строки, например.MyDevice
. Объедините их и хешируйте результат, используя MD5 (или свою собственную схему хеширования), и используйте часть хэша в качестве ключа. Для проверки просто вычислите хэш дляmySecretKey
и текущего идентификатора устройства и сравните с серийным номером. Если он совпадает, серийный номер действителен для этого устройства. На другом компьютере он никогда не будет совпадать, потому что идентификатор устройства неверен. - person Polynomial   schedule 07.11.2011