Mattermost Android App, no connection to self hosted server

Hi all

Since some time, I cannot connect from my android to my self hosted mattermost server. The error message on the app is “Connection to server not possible”. If i try another public mattermost server, is working fine! So it must be something on my self hosted server. Strange is, that some monthes ago, it was working fine! So it could be only an update or a new SSL Cert.

Some details about my infrastructure:

Any ideas why they is not working, or how I can also debug further? On the Mattermost Logs we do not see anything!

Android CatLog

2024-07-17 07:26:37.088  2753-2769  deeptouch               and...dware.input.processor-service  I  I0000 00:00:1721193997.088731    2769 tf_lite_classifier.cc:413] Event stream classified as kNone
2024-07-17 07:26:37.101 27150-27222 RNKeychainManager       zygote64                             E  No entry found for service: http://master.domain.com/mattermost
2024-07-17 07:26:37.102 27150-27150 ImeTracker              zygote64                             I  com.mattermost.rn:fb997f2: onRequestHide at ORIGIN_CLIENT reason HIDE_SOFT_INPUT fromUser false
2024-07-17 07:26:37.103  1528-2032  ImeTracker              system_server                        I  com.mattermost.rn:fb997f2: onCancelled at PHASE_SERVER_SHOULD_HIDE
2024-07-17 07:26:37.227 27150-27322 TrafficStats            zygote64                             D  tagSocket(5) with statsTag=0xffffffff, statsUid=-1
2024-07-17 07:26:37.725  1879-1898  pixel-thermal           and...ardware.thermal-service.pixel  I  BCL_AUDIO_BAACL:1 raw data: BCL_AUDIO_BAACL:1 battery:26900 soc:85 
2024-07-17 07:26:37.743  1879-1898  pixel-thermal           and...ardware.thermal-service.pixel  I  soc:85 raw data: soc:85 
2024-07-17 07:26:37.939 27150-27222 TurboLogger             zygote64                             D  getServerUrlAfterRedirect error https://master.domain.com/mattermost {
                                                                                                      "nativeStackAndroid": [
                                                                                                        {
                                                                                                          "lineNumber": 127,
                                                                                                          "file": "RetryAndFollowUpInterceptor.kt",
                                                                                                          "methodName": "intercept",
                                                                                                          "class": "okhttp3.internal.http.RetryAndFollowUpInterceptor"
                                                                                                        },
                                                                                                        {
                                                                                                          "lineNumber": 109,
                                                                                                          "file": "RealInterceptorChain.kt",
                                                                                                          "methodName": "proceed",
                                                                                                          "class": "okhttp3.internal.http.RealInterceptorChain"
                                                                                                        },
                                                                                                        {
                                                                                                          "lineNumber": 201,
                                                                                                          "file": "RealCall.kt",
                                                                                                          "methodName": "getResponseWithInterceptorChain$okhttp",
                                                                                                          "class": "okhttp3.internal.connection.RealCall"
                                                                                                        },
                                                                                                        {
                                                                                                          "lineNumber": 517,
                                                                                                          "file": "RealCall.kt",
                                                                                                          "methodName": "run",
                                                                                                          "class": "okhttp3.internal.connection.RealCall$AsyncCall"
                                                                                                        },
                                                                                                        {
                                                                                                          "lineNumber": 1145,
                                                                                                          "file": "ThreadPoolExecutor.java",
                                                                                                          "methodName": "runWorker",
                                                                                                          "class": "java.util.concurrent.ThreadPoolExecutor"
                                                                                                        },
                                                                                                        {
                                                                                                          "lineNumber": 644,
                                                                                                          "file": "ThreadPoolExecutor.java",
                                                                                                          "methodName": "run",
                                                                                                          "class": "java.util.concurrent.ThreadPoolExecutor$Worker"
                                                                                                        },
                                                                                                        {
                                                                                                          "lineNumber": 1012,
                                                                                                          "file": "Thread.java",
                                                                                                          "methodName": "run",
                                                                                                          "class": "java.lang.Thread"
                                                                                                        }
                                                                                                      ],
                                                                                                      "userInfo": null,
                                                                                                      "message": "Too many follow-up requests: 21",
                                                                                                      "code": "EUNSPECIFIED",
                                                                                                      "jsEngine": "hermes"
                                                                                                    }
2024-07-17 07:26:37.971 27150-27322 TrafficStats            zygote64                             D  tagSocket(176) with statsTag=0xffffffff, statsUid=-1
2024-07-17 07:26:38.339 27150-27222 ziparchive              zygote64                             W  Unable to open '/data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.dm': No such file or directory
2024-07-17 07:26:38.339 27150-27222 ziparchive              zygote64                             W  Unable to open '/data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.dm': No such file or directory
2024-07-17 07:26:38.342 27150-27222 m.mattermost.rn         zygote64                             W  Entry not found
2024-07-17 07:26:38.344 27150-27222 nativeloader            zygote64                             D  Configuring clns-7 for other apk /data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.apk. target_sdk_version=34, uses_libraries=ALL, library_path=/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/lib/arm64:/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/base.apk!/lib/arm64-v8a:/data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand
2024-07-17 07:26:38.344 27150-27222 nativeloader            zygote64                             D  Extending system_exposed_libraries: libedgetpu_dba.google.so
2024-07-17 07:26:38.350 27150-27222 ApplicationLoaders      zygote64                             D  Returning zygote-cached class loader: /system_ext/framework/androidx.window.extensions.jar
2024-07-17 07:26:38.361 27150-27222 nativeloader            zygote64                             D  Configuring clns-8 for other apk /data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/base.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/lib/arm64:/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/base.apk!/lib/arm64-v8a:/data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand
2024-07-17 07:26:38.373 27150-27222 WebViewFactory          zygote64                             I  Loading com.google.android.webview version 126.0.6478.134 (code 647813433)
2024-07-17 07:26:38.374 27150-27222 ResourcesManager        zygote64                             W  Found a ResourcesImpl which is null, skip it and continue to append shared library assets for next ResourcesImpl.
2024-07-17 07:26:38.385 27150-27222 ResourcesManager        zygote64                             V  The following resources' paths have been added: [/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/base.apk, /data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/split_config.de.apk, /data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/split_config.en.apk, /data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/split_config.fr.apk, /data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/split_config.it.apk, /data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.apk, /system_ext/framework/androidx.window.extensions.jar, /product/overlay/NavigationBarModeGestural/NavigationBarModeGesturalOverlay.apk, /data/resource-cache/com.android.systemui-neutral-CDPg.frro, /data/resource-cache/com.android.systemui-accent-7OH5.frro, /data/resource-cache/com.android.systemui-dynamic-fcHz.frro]
2024-07-17 07:26:38.413 27150-27222 cr_WVCFactoryProvider   zygote64                             I  version=126.0.6478.134 (647813433) minSdkVersion=29 isBundle=true multiprocess=true packageId=2
2024-07-17 07:26:38.417 27150-27222 nativeloader            zygote64                             D  Load /data/app/~~uUvHfOGftA1Rx_MCqy0EWw==/com.google.android.trichromelibrary_647813433-bIFd3gVkMiAbN-FPeA6MdA==/base.apk!/lib/arm64-v8a/libmonochrome_64.so using ns clns-8 from class loader (caller=/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/base.apk): ok
2024-07-17 07:26:38.420 27150-27222 nativeloader            zygote64                             D  Load /system/lib64/libwebviewchromium_plat_support.so using ns clns-8 from class loader (caller=/data/app/~~bjpFYraPDwEBZXbmhvTE3g==/com.google.android.webview-HLWsYWV5lsCrLPTPi-E9TQ==/base.apk): ok
2024-07-17 07:26:38.429 27150-27222 cr_LibraryLoader        zygote64                             I  Successfully loaded native library
2024-07-17 07:26:38.430 27150-27222 cr_CachingUmaRecorder   zygote64                             I  Flushed 6 samples from 6 histograms, 0 samples were dropped.
2024-07-17 07:26:38.438  1528-4370  ActivityManager         system_server                        D  sync unfroze 5472 com.google.android.webview:webview_service for 6
2024-07-17 07:26:38.442  1528-4370  ProcessStats            system_server                        W  Tracking association SourceState{f759222 com.mattermost.rn/10547 BTop #1048985} whose proc state 2 is better than process ProcessState{19c9fda com.google.android.webview:webview_service/10184 pkg=com.google.android.webview} proc state 14 (0 skipped)
2024-07-17 07:26:38.449 27150-27337 TrafficStats            zygote64                             D  tagSocket(189) with statsTag=0xffffffff, statsUid=-1
2024-07-17 07:26:38.479  1528-2528  ConnectivityService     system_server                        D  NetReassign [no changes] [c 1] [a 0] [i 2]
2024-07-17 07:26:38.527 27150-27222 TurboLogger             zygote64                             D  Server ping threw an exception Response with status code 404
2024-07-17 07:26:39.394 21438-21476 BugleRcsEngine          com.google.android.apps.messaging    I  delay time out, reset attempts 1 and process SIM event [CONTEXT thread_id=1034 ]
2024-07-17 07:26:39.415 21438-21476 BugleRcsEngine          com.google.android.apps.messaging    I  process intent: android.intent.action.SIM_STATE_CHANGED [CONTEXT log_prefix="(Sim)" thread_id=1034 ]
2024-07-17 07:26:39.422 25776-25813 BugleRcsEngine          com...le.android.apps.messaging:rcs  I  delay time out, reset attempts 1 and process SIM event [CONTEXT thread_id=666 ]
2024-07-17 07:26:39.427 25776-25813 BugleRcsEngine          com...le.android.apps.messaging:rcs  I  process intent: android.intent.action.SIM_STATE_CHANGED [CONTEXT log_prefix="(Sim)" thread_id=666 ]
2024-07-17 07:26:39.450 21438-21476 BugleRcsEngine          com.google.android.apps.messaging    I  Processing an intent [CONTEXT log_prefix="(Sim)" thread_id=1034 ]
2024-07-17 07:26:39.457  3813-4634  CarrierServices         com.google.android.ims               I  [41] fmd.run:18 delay time out, reset attempts 1 and process SIM event
2024-07-17 07:26:39.460 21438-21476 BugleRcsEngine          com.google.android.apps.messaging    I  Ignoring duplicate SIM state: LOADED [CONTEXT log_prefix="(Sim)" thread_id=1034 ]
2024-07-17 07:26:39.471  3813-4634  CarrierServices         com.google.android.ims               I  [41] fmc.a:17 (Sim): process intent: android.intent.action.SIM_STATE_CHANGED
2024-07-17 07:26:39.475 25776-25813 BugleRcsEngine          com...le.android.apps.messaging:rcs  I  Processing an intent [CONTEXT log_prefix="(Sim)" thread_id=666 ]
2024-07-17 07:26:39.484 25776-25813 BugleRcsEngine          com...le.android.apps.messaging:rcs  I  Ignoring duplicate SIM state: LOADED [CONTEXT log_prefix="(Sim)" thread_id=666 ]
2024-07-17 07:26:39.486  3813-4634  CarrierServices         com.google.android.ims               I  [41] fmc.h:73 (Sim): Processing an intent
2024-07-17 07:26:39.489  3813-4634  CarrierServices         com.google.android.ims               I  [41] fmc.r:73 (Sim): Ignoring duplicate SIM state: LOADED
2024-07-17 07:26:39.750  1879-1898  pixel-thermal           and...ardware.thermal-service.pixel  I  BCL_AUDIO_BAACL:1 raw data: BCL_AUDIO_BAACL:1 battery:26900 soc:85 
2024-07-17 07:26:39.766  1879-1898  pixel-thermal           and...ardware.thermal-service.pixel  I  soc:85 raw data: soc:85 
2024-07-17 07:26:40.217  1224-1634  RFSD                    rfsd                                 I  [RfsService::Nv] ProcessMessage : RFS_IO_REQUEST

Apache2 Configuration

RewriteEngine On
RewriteCond %{REQUEST_URI} /mattermost/api/v[0-9]+/(users/)?websocket [NC,OR]
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://111.111.100.202:8065%{REQUEST_URI} [P,QSA,L]
ProxyRequests     Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Proxy http://111.111.100.202:8065/mattermost*>
        Order deny,allow
        Allow from all
</Proxy>
ProxyPass         /mattermost  http://111.111.100.202:8065/mattermost nocanon
ProxyPassReverse  /mattermost  http://111.111.100.202:8065/mattermost
ProxyPassReverse  /mattermost  http://master.domain.com/mattermost
ProxyPass         /mattermost  wss://111.111.100.202:8065/mattermost
ProxyPassReverse  /mattermost  wss://111.111.100.202:8065/mattermost
  1. In a browser, if you go to the URL of the Mattermost server, what do you see?

  2. Is there a firewall on the host?

  3. What do the apache logs say?

  4. How about system logs?

Thank you for writing back @john.oliver !

If we access it trough the Browser (on Mobile/WPA or on Client) is working fine!

I have bellow the apache logs (from my apache proxy), and there i see some redirects which makes no sense… but only from the android app (all other works how i write)… any idea why?

88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost HTTP/1.1" 302 6156 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/ HTTP/1.1" 302 242 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost HTTP/1.1" 302 253 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost HTTP/1.1" 302 264 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 275 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 286 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 297 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 308 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 319 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 330 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 341 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 352 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 363 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 374 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 385 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 396 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 407 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 418 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 429 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 440 "-" "okhttp/4.12.0"
88.254.188.101 - - [22/Jul/2024:10:22:00 +0200] "HEAD /mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost/mattermost HTTP/1.1" 302 451 "-" "okhttp/4.12.0"

Try trailing slashes in your ProxyPass / ProxyPassReverse directives.

which one did you mean (see bellow)?

I’m not an expert and it’s been a while since I did apache2 proxy directives. But you could try:

ProxyPass /mattermost/ wss://111.111.100.202:8065/mattermost

Or

ProxyPass /mattermost wss://111.111.100.202:8065/mattermost/

Or

ProxyPass /mattermost/ wss://111.111.100.202:8065/mattermost/

One thing I did notice… wss is Secure Websocket and you’re using an unencrypted http socket. So you may want to use ws:\\ instead of wss:// I doubt that would lead to the recursion we’re seeing (that’s what I’d try experimenting with trailing slashes to try to fix), but it may cause other issues.

i try all options and also only with ws instead of wss, but nothing works… always the redirects on the logfile… strang is, that if i make the access with the browser or mac app, it works… only with smartphone app is not working

@john.oliver i found this issue, Too Many Redirects when logging in from Mobile Apps when Server is using subpath hosting · Issue #7160 · mattermost/docs · GitHub looks like the same issue