Привет сообщество! На одном из проектов у меня встала задача организовать связку 1 пользователь = 1 мобильное устройство (под управлением Android), т.е. запретить вход с разных устройств под одним пользователем. Логично, что я решил использовать AndroidID в качестве идентификатора, однако быстрый поиск в гугле меня озадачил, оказалось, что на текущий момент штатными средствами мобильной платформы его не получить. На глаза попались отличные статьи от Дмитрия Васильева (за что ему огромный респект, статьи раз, два и три), где очень подробно описано как взаимодействовать со сторонними приложениями через Intent, поэтому расписывать код не буду, смотрите исходники). Я перебрал добрый десяток приложений в маркете от самых простых до более навороченных, но так и не смог найти приложение, которое бы поддерживало передачу значения в Intent. Что же придется писать свое приложение, по сути это мое первое приложение на Android, и оно максимально простое, но свою задачу оно выполняет, определяет, а главное возвращает в 1С значение.
Главный экран приложения (для первоначального занесения идентификатора в 1С)
Код в 1С:
Функция ПолучитьIDУстройства() Экспорт
IDУстройства = Неопределено;
#Если МобильныйКлиент ИЛИ МобильноеПриложение Тогда
ЗапускПриложения = Новый ЗапускПриложенияМобильногоУстройства();
Если ЗапускПриложения.ПоддерживаетсяЗапуск() Тогда
ЗапускПриложения.Действие = "com.android.tinydeviceid.action.getDeviceID";
ЗапускПриложения.Запустить(Истина);
Для Каждого КлючЗначение Из ЗапускПриложения.ДополнительныеДанные Цикл
Если КлючЗначение.Ключ = "DeviceID" Тогда
IDУстройства = КлючЗначение.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
#КонецЕсли
Возврат IDУстройства;
КонецФункции // ПолучитьIDУстройства()
Ну и конечный результат:
В архиве само приложение (apk) и исходники, также есть на гитхабе (AntSidorov)
Надеюсь сэкономлю кому-нибудь немного времени, всем успехов!
а как получаете разрешение?
Показать
код получения ID в Андроид с учетом разрешений
хорошо, что я не стал изучать мобильную платформу, зачем мне эти приколы )
Да вроде никаких дополнительных разрешений не нужно, я использовал такой код:
(2)
я целенаправленно тоже не собирался, но появилась необходимость и пришлось поизучать) и мобильный клиент оставил достаточно положительное впечатление
(3) а как же это ?
<uses-permission android:name=»android.permission.READ_PHONE_STATE» />
должно быть по любому в манифесте
(4) для того что бы получить IMEI нужно извращятся 🙂
1С должна быть программой для учета, Андроид — операционной системой для мобильных устройств… лучше бы они выпустили свой SDK, потому как реализовывать некоторые интерфейсные вещи на чистом андроиде, трудозатратно.
(5)
у меня никаких дополнительных разрешений нет, вот полный листинг манифеста:
Показать
(6)
насчет IMEI не в курсе, я его отмел т.к. насколько я понял в 2-х симочных аппаратах их 2, не буду утверждать, но я понял так
Как работать с архивом?
(9)
В архиве apk приложение ставите на свой телефон, в 1С пишите функцию (пример в статье), публикуете БД и подключаетесь к БД мобильным клиентом.
(5)
(7) Начиная с версии Android 6.0 (API level 23) и выше требуется, чтобы в манифесте было прописано разрешение на определенный взаимодействия с системой. Как правильно написал WKBAPKA — нужно сделать проверку, если API >= 23, тогда сначала запрашивать разрешение у пользователя, в другом случае сразу получать идентификатор.