You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The navigator.mediaSession API is not supported in Android WebView when using the flutter_inappwebview package, resulting in undefined for navigator.mediaSession and an empty navigator object (JSON.stringify(navigator) = {}). This prevents media notification controls (play, pause, seek) from working on Android, while the same code works fine on iOS (WKWebView).
Steps to Reproduce
Use flutter_inappwebview (version 6.0.0) to load a YouTube video iframe.
Configure InAppWebView with the following settings:
initialSettings: InAppWebViewSettings(
javaScriptEnabled: true,
mediaPlaybackRequiresUserGesture: false,
allowsInlineMediaPlayback: true,
allowBackgroundAudioPlaying: true,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
)
Inject JavaScript to check navigator.mediaSession:
await webViewController.evaluateJavascript(source: '''
console.log('[MediaSession] Navigator object:', JSON.stringify(navigator));
console.log('[MediaSession] MediaSession exists:', 'mediaSession' in navigator);
if ('mediaSession' in navigator) {
console.log('[MediaSession] MediaSession API supported');
} else {
console.error('[MediaSession] MediaSession API not supported');
}
''');
Run the app on an Android device (tested on Android 12, System WebView Chrome/139.0.7258.143).
Check logs via chrome://inspect.
Expected Behavior
navigator.mediaSession should be available in Android WebView, as it is in iOS WKWebView, to enable media notification controls.
JSON.stringify(navigator) should return a non-empty object with properties like userAgent, mediaSession, etc.
Actual Behavior
Logs show:
I/chromium: [INFO:CONSOLE:1] "[MediaSession] Navigator object: {}"
I/chromium: [INFO:CONSOLE:2] "[MediaSession] MediaSession exists: false"
I/chromium: [INFO:CONSOLE:3] "[MediaSession] MediaSession API not supported"
navigator.mediaSession is undefined, and navigator object is empty, preventing media notification controls.
Environment
Flutter Version: 3.x.x
flutter_inappwebview Version: 6.0.0
Platform: Android (tested on Android 12, Samsung Galaxy S10+)
System WebView: Chrome/139.0.7258.143
User Agent: Mozilla/5.0 (Linux; Android 12; SM-G975F Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/139.0.7258.143 Mobile Safari/537.36
iOS Behavior: Works correctly with WKWebView.
Additional Context
The custom userAgent set in InAppWebViewSettings is not applied; Android WebView uses the default device User Agent with wv.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
The navigator.mediaSession API is not supported in Android WebView when using the flutter_inappwebview package, resulting in undefined for navigator.mediaSession and an empty navigator object (JSON.stringify(navigator) = {}). This prevents media notification controls (play, pause, seek) from working on Android, while the same code works fine on iOS (WKWebView).
Steps to Reproduce
Use flutter_inappwebview (version 6.0.0) to load a YouTube video iframe.
Configure InAppWebView with the following settings:
initialSettings: InAppWebViewSettings(
javaScriptEnabled: true,
mediaPlaybackRequiresUserGesture: false,
allowsInlineMediaPlayback: true,
allowBackgroundAudioPlaying: true,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
)
Inject JavaScript to check navigator.mediaSession:
await webViewController.evaluateJavascript(source: '''
console.log('[MediaSession] Navigator object:', JSON.stringify(navigator));
console.log('[MediaSession] MediaSession exists:', 'mediaSession' in navigator);
if ('mediaSession' in navigator) {
console.log('[MediaSession] MediaSession API supported');
} else {
console.error('[MediaSession] MediaSession API not supported');
}
''');
Run the app on an Android device (tested on Android 12, System WebView Chrome/139.0.7258.143).
Check logs via chrome://inspect.
Expected Behavior
navigator.mediaSession should be available in Android WebView, as it is in iOS WKWebView, to enable media notification controls.
JSON.stringify(navigator) should return a non-empty object with properties like userAgent, mediaSession, etc.
Actual Behavior
Logs show:
I/chromium: [INFO:CONSOLE:1] "[MediaSession] Navigator object: {}"
I/chromium: [INFO:CONSOLE:2] "[MediaSession] MediaSession exists: false"
I/chromium: [INFO:CONSOLE:3] "[MediaSession] MediaSession API not supported"
navigator.mediaSession is undefined, and navigator object is empty, preventing media notification controls.
Environment
Flutter Version: 3.x.x
flutter_inappwebview Version: 6.0.0
Platform: Android (tested on Android 12, Samsung Galaxy S10+)
System WebView: Chrome/139.0.7258.143
User Agent: Mozilla/5.0 (Linux; Android 12; SM-G975F Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/139.0.7258.143 Mobile Safari/537.36
iOS Behavior: Works correctly with WKWebView.
Additional Context
The custom userAgent set in InAppWebViewSettings is not applied; Android WebView uses the default device User Agent with wv.
According to MDN, navigator.mediaSession is not supported in Android WebView, but works in iOS WKWebView (https://developer.mozilla.org/en-US/docs/Web/API/MediaSession).
Related W3C issue: w3c/mediasession#337
Is there a way to enable navigator.mediaSession in Android WebView, or is this a known limitation? Any workarounds?
Logs
I/chromium(21084): [INFO:CONSOLE:1] "[MediaSession] User Agent: Mozilla/5.0 (Linux; Android 12; SM-G975F Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/139.0.7258.143 Mobile Safari/537.36"
I/chromium(21084): [INFO:CONSOLE:2] "[MediaSession] Navigator object: {}"
I/chromium(21084): [INFO:CONSOLE:3] "[MediaSession] MediaSession API not supported"
Request
Can flutter_inappwebview enable navigator.mediaSession in Android WebView?
If not supported, are there recommended workarounds (e.g., native MediaSession integration via platform channels)?
Beta Was this translation helpful? Give feedback.
All reactions