Лицензирование приложений и уникальный идентификатор Android - PullRequest
2 голосов
/ 06 июля 2011

Я собираюсь опубликовать платное приложение на Android Market.Приложение использует LVL (Application Licensing).Для подтверждения лицензии я должен предоставить уникальный идентификатор устройства.Проблема в том, что некоторые устройства Android (из-за известной проблемы) имеют одинаковые «уникальные» идентификаторы при вызове:

Secure.getString(getContentResolver(), Secure.ANDROID_ID);

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

Если кто-то из вас, ребята, использовал LVL, пожалуйста, дайте мне знать, как вы получили идентификатор устройства при создании объекта LicenseChecker ().Я просто пытаюсь понять, что может произойти, если два пользователя с одинаковым идентификатором устройства попытаются купить приложение.

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Подробные инструкции о том, как получить уникальный идентификатор для каждого устройства Android, с которого установлено приложение, см. В официальном сообщении блога разработчиков Android:

http://android -developers.blogspot.com /2011/03 / identifying-app-instal.html

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

Лично я считаю это приемлемым, но не идеальным.Ни один идентификатор, предоставляемый Android, не работает во всех случаях, поскольку большинство из них зависят от состояния радиосвязи телефона (вкл / выкл wifi, вкл / выкл сотовой связи, вкл / выкл bluetooth).Другие, такие как Settings.Secure.ANDROID_ID, должны быть реализованы производителем и не обязательно должны быть уникальными.

Ниже приведен пример записи данных в файл INSTALLATION, который будет храниться вместе с любыми другими даннымиприложение сохраняет локально.

public class Installation {
    private static String sID = null;
    private static final String INSTALLATION = "INSTALLATION";

    public synchronized static String id(Context context) {
        if (sID == null) {  
            File installation = new File(context.getFilesDir(), INSTALLATION);
            try {
                if (!installation.exists())
                    writeInstallationFile(installation);
                sID = readInstallationFile(installation);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        return sID;
    }

    private static String readInstallationFile(File installation) throws IOException {
        RandomAccessFile f = new RandomAccessFile(installation, "r");
        byte[] bytes = new byte[(int) f.length()];
        f.readFully(bytes);
        f.close();
        return new String(bytes);
    }

    private static void writeInstallationFile(File installation) throws IOException {
        FileOutputStream out = new FileOutputStream(installation);
        String id = UUID.randomUUID().toString();
        out.write(id.getBytes());
        out.close();
    }
}
1 голос
/ 28 июля 2011

Два устройства с одинаковым идентификатором просто предоставили бы приложение бесплатно другому устройству, однако LVL по-прежнему работает с Google ID. Поскольку LVL использует аутентификацию Google, крайне редко можно встретить человека с таким же идентификатором и тем же идентификатором Google, который купит одно и то же приложение. Тем более, что они уже владеют им!

Если это не поможет, попробуйте ниже:

http://developer.android.com/guide/publishing/licensing.html состояния:

объявляет переменную для хранения идентификатора устройства и генерирует значение для него любым необходимым способом. Например, пример приложения, включенного в LVL, запрашивает системные настройки для android.Settings.Secure.ANDROID_ID, который уникален для каждого устройства.

Обратите внимание, что в зависимости от используемых API-интерфейсов вашему приложению может потребоваться запрос дополнительных разрешений для получения информации об устройстве. Например, чтобы запросить TelephonyManager для получения IMEI устройства или связанных данных, приложению также потребуется запросить разрешение android.permission.READ_PHONE_STATE в своем манифесте.

Прежде чем запрашивать новые разрешения с единственной целью получения информации об устройстве для использования в Obfuscator, подумайте, как это может повлиять на ваше приложение или его фильтрацию в Android Market (поскольку некоторые разрешения могут привести к тому, что инструменты сборки SDK добавят связанный).

...