microg / microg/GmsCore

Boursobank hangs on loading screen, apparently around Play Integrity after authent

Open
#3,738 0 comments 1 reaction 0 assignees Claimed by @jonathanklee View on GitHub
bug
Dominant language
Java
Stars
14.6k
Forks
3.2k
PR merge metrics
PR metrics pending

Description

**Describe the bug**

I cannot log in to the Boursobank app.

**To Reproduce**

1. Install Boursobank via Aurora Store.
2. Enter my ID.
3. Enter my password.
4. The app remains stuck on the loading screen indefinitely.

**Expected behavior**

I should be logged in and taken to my account.

**Screenshots**

Boursobank stuck on loading screen

**System**
Android version: 15
Custom ROM: LineageOS 22.2
Device: OnePlus 6T
microG Core version: 0.3.16.252432
microG Self-Check results: All ticked
Boursobank version: 7.74.1

**Additional context**

I also tried disabling microG as recommended [here](https://community.e.foundation/t/list-banking-apps-on-e-os/33091/481)

However, this does not work for me, because I don't get the option to "go to website" to log in.

One thing that caught my attention is that the app requests a Play Integrity token shortly after startup, and later calls requestAndShowDialog(). The app remains stuck on the loading screen afterwards.

There is also an nfc_manager exception in the log, although I don't know whether it is related to the issue.

Here is the relevant adb logcat --pid=12668 output. I've removed some irrelevant information from the log for readability and privacy.

```
08-25 19:33:06.849 I FirebaseCrashlytics: Initializing Firebase Crashlytics
08-25 19:33:06.874 I FirebaseInitProvider: FirebaseApp initialization successful

08-25 19:33:06.931 I flutter: [IMPORTANT:flutter/shell/common/shell.cc(527)] [Action Required]: Impeller opt-out deprecated.
08-25 19:33:06.931 I flutter: The application opted out of Impeller.

08-25 19:33:06.991 E GeneratedPluginRegistrant: Error registering plugin nfc_manager, dev.flutter.plugins.nfcmanager.NfcManagerPlugin
08-25 19:33:06.991 E GeneratedPluginRegistrant: java.lang.NullPointerException: Attempt to invoke virtual method
08-25 19:33:06.991 E GeneratedPluginRegistrant: 'java.util.Iterator android.content.IntentFilter.actionsIterator()'
08-25 19:33:06.991 E GeneratedPluginRegistrant: on a null object reference
08-25 19:33:06.991 E GeneratedPluginRegistrant: at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1936)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at android.app.ContextImpl.registerReceiver(ContextImpl.java:1872)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:784)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at qc.y.onAttachedToActivity(...)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(...)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1706)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at android.app.Activity.performStart(Activity.java:9122)
08-25 19:33:06.991 E GeneratedPluginRegistrant: at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4231)

08-25 19:33:07.021 I flutter: [start app in Environment{...}] with native mode release

08-25 19:33:07.834 I DynamiteModule: Considering local module com.google.android.gms.cronet_dynamite:0 and remote module com.google.android.gms.cronet_dynamite:2
08-25 19:33:07.834 I DynamiteModule: Selected remote version of com.google.android.gms.cronet_dynamite, version >= 2

08-25 19:33:08.377 I cr_CronetLibraryLoader: Cronet version: 102.0.5005.125, arch: aarch64

08-25 19:33:08.609 I PlayCore: IntegrityService: requestIntegrityToken(...)
08-25 19:33:08.625 I PlayCore: IntegrityService: ServiceConnectionImpl.onServiceConnected(...)
08-25 19:33:11.163 I PlayCore: OnRequestIntegrityTokenCallback: onRequestIntegrityToken
08-25 19:33:11.163 I PlayCore: IntegrityService: Unbind from service.

08-25 19:33:13.349 I flutter: Contentsquare Flutter SDK starting

08-25 19:33:13.365 W FA: User ID must be non-empty or null

08-25 19:33:16.969 I android.clients: Background concurrent copying GC freed memory

08-25 19:33:30.577 I PlayCore: IntegrityService: requestAndShowDialog(...)

08-25 19:34:21.600 I TRuntime.CctTransportBackend: Making request to Firebase logging service
08-25 19:34:23.963 I TRuntime.CctTransportBackend: Status Code: 200

08-25 19:34:29.244 D SessionLifecycleClient: Sending lifecycle 2 to service
08-25 19:34:29.244 D SessionLifecycleService: Activity backgrounding

```

Contributor guide

No contributing guide indexed for this repository

Research direction

No source file or test is named. Start by tracing the Play Integrity requestIntegrityToken and requestAndShowDialog calls referenced in the logcat, then compare their behavior with the login flow; done means identifying the cause of the indefinite loading screen and verifying that login completes.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java
Domain
authentication, mobile-dev, security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.