NowPlayingConfig
@objcMembers
@objc(BMPNowPlayingConfig)
public class NowPlayingConfig : NSObject, @unchecked Sendable
Configures the current Now Playing information for the application. This information will be displayed wherever Now Playing information typically appears, such as the lock screen and inside the control center.
-
Enable the default behaviour of Now Playing information to be displayed on the lock-screen and inside the control center. Default is
false
.For a detailed list of the supported features in the default behaviour, check the Default Supported Features section.
Limitations
- Currently the current Now Playing information is disabled during casting.
Know issues
- There is an unexpected behaviour when using the IMA SDK. The Google IMA SDK adds its own
MPRemoteCommand
for play/pause right when the ad starts loading (not when it started playing). Within this time window (approximately around 10 seconds) it’s possible that the Ad and the main content are playing at the same time when a user interacts with the Now Playing feature.
Customization
It is possible to customize or add additional information. Please ensure that your code is executed after the
Player
instance has been created.Adding a Command
To add an additional command to the
MPRemoteCommandCenter
, simply add a new target to the command you want to show. In this example we add alikeCommand
:// Get the shared MPRemoteCommandCenter let commandCenter = MPRemoteCommandCenter.shared() // Add handler for the new Command commandCenter.likeCommand.addTarget { event in // React to the like button interaction return .success }
Removing a Command
It is possible to remove one of the commands we add per default by removing all targets from a command.
// Get the shared MPRemoteCommandCenter let commandCenter = MPRemoteCommandCenter.shared() // Remove all registered targets commandCenter.skipBackwardCommand.removeTarget(nil)
The list of supported commands per default can be found at the Default Supported Features section.
Customizing a Command
Some commands, such as the
skipBackwardsCommand
, have additional customization options. For example it’s possible to change the skip interval to a custom value:// Get the shared MPRemoteCommandCenter let commandCenter = MPRemoteCommandCenter.shared() // Customize the Command commandCenter.skipBackwardCommand.preferredIntervals = [5]
Overriding a Command
In case you want to have a custom implementation for one of the commands we add per default, you can do so by first removing it and adding your own command.
// Get the shared MPRemoteCommandCenter let commandCenter = MPRemoteCommandCenter.shared() // Remove all registered targets commandCenter.skipBackwardCommand.removeTarget(nil) // Add a new handler for the Command commandCenter.skipBackwardCommand.addTarget { [weak player] _ in guard let player else { return .commandFailed } // React to the skip backward button interaction return .success }
Default Supported Features
Here is the list of supported features in the default behavior.
Populated Metadata
MPNowPlayingInfoPropertyAssetURL
MPMediaItemPropertyTitle
MPMediaItemPropertyArtwork
MPNowPlayingInfoPropertyIsLiveStream
MPNowPlayingInfoPropertyPlaybackRate
MPNowPlayingInfoPropertyDefaultPlaybackRate
MPNowPlayingInfoPropertyElapsedPlaybackTime
MPMediaItemPropertyPlaybackDuration
Registered Commands
- togglePlayPauseCommand
- changePlaybackPositionCommand
- skipForwardCommand
- skipBackwardCommand
The skip interval is specified by the
MPSkipIntervalCommand.preferredIntervals
and can be configured for the.skipForwardCommand
and.skipBackwardCommand
on theMPRemoteCommandCenter.shared()
individually.Declaration
Swift
public var isNowPlayingInfoEnabled: Bool