Как получить дочерний узел события доступности, когда приложение кажется защищенным

Вопрос или проблема

Я пытаюсь получить баланс приложения Google Pay, используя фреймворк службы доступности. Но когда дело доходит до банковского баланса, служба не может получить дочерний узел. Похоже, что экран защищен. Тем не менее, я могу получить элемент с помощью Appium.

Есть ли способ получить данные, используя службу доступности?

Я попытался установить
android:canRetrieveWindowContent=”true”
в serviceconfig.xml

но это ничего не изменило.

Минимальный воспроизводимый пример:

public void onAccessibilityEvent(AccessibilityEvent event) {
    AccessibilityNodeInfo mSource = event.getSource();
    boolean ifHome = false;
    int eventType = event.getEventType();
    String pkgname = event.getPackageName() == null ? "" : event.getPackageName().toString();
    AccessibilityNodeInfo rootNode = getRootInActiveWindow();
}

Ответ или решение

Для получения информации о дочерних узлах события доступности (Accessibility Event) в приложении, которое, похоже, защищено, важно понимать, что многие современные приложения, такие как Google Pay, используют различные методы защиты данных, чтобы предотвратить доступ к их контенту посредством сторонних сервисов, включая услуги доступности.

Вот несколько рекомендаций и шагов, которые могут помочь решить вашу проблему:

1. Проверьте разрешения службы доступности

Убедитесь, что ваша служба доступности имеет все необходимые разрешения. Возможно, вам потребуется предоставить дополнительные разрешения в настройках устройства, помимо указанного android:canRetrieveWindowContent="true".

2. Используйте правильные события

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

3. Читайте содержимое узлов

Если event.getSource() возвращает пустой узел, попробуйте получить корневой узел, как вы делаете в своем примере с getRootInActiveWindow(), и после этого использовать метод findAccessibilityNodeInfosByViewId() для поиска конкретных элементов по идентификаторам представлений (View IDs).

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    super.onAccessibilityEvent(event);
    AccessibilityNodeInfo rootNode = getRootInActiveWindow();

    if (rootNode != null) {
        List<AccessibilityNodeInfo> nodeList = rootNode.findAccessibilityNodeInfosByViewId("id_of_the_balance_view");

        // Обработка найденных узлов
        for (AccessibilityNodeInfo node : nodeList) {
            // Здесь вы можете получить текст, идентификатор и т.д.
            String balance = node.getText().toString();
            Log.d("Balance", "Current balance is: " + balance);
        }
    }
}

4. Используйте доступные методы

Обратите внимание на методы для обхода узлов, такие как getChild() и getParent(). С помощью их можно обходить структуру узлов, если вам не удается получить определенные элементы из-за защиты.

5. Убедитесь в совместимости устройств

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

6. Обратитесь к документации Google

Обратите внимание на генерируемую документацию Google по Accessibility Services и по работе с защищенными данными. Некоторые элементы могут быть недоступны, и о таких случаях может быть упомянуто в официальной документации.

Заключение

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

Если ни одно из предложений не сработает, стоит задуматься о том, насколько эти данные критичны и следует ли их извлечение в рамках действующих норм безопасности и конфиденциальности.

Оцените материал
Добавить комментарий

Капча загружается...