bitmovin-player-react-native
Version:
Official React Native bindings for Bitmovin's mobile Player SDKs.
81 lines (73 loc) • 2.38 kB
text/typescript
import {
ConfigPlugin,
withInfoPlist,
withPodfileProperties,
} from 'expo/config-plugins';
import { BitmovinConfigOptions } from './withBitmovinConfig';
const isTV = !!process.env.EXPO_TV;
const withBitmovinIosConfig: ConfigPlugin<BitmovinConfigOptions> = (
config,
options
) => {
const { playerLicenseKey = '', features = {} } = options || {};
const offlineFeatureConfig =
typeof features.offline === 'object'
? features.offline
: {
android: {
isEnabled: !!features.offline,
externalStoragePermission: false,
},
ios: { isEnabled: !!features.offline },
};
const googleCastIosConfig = features.googleCastSDK?.ios
? typeof features.googleCastSDK.ios === 'string'
? { version: features.googleCastSDK.ios }
: features.googleCastSDK.ios
: null;
config = withInfoPlist(config, (config) => {
if (playerLicenseKey) {
config.modResults['BitmovinPlayerLicenseKey'] = playerLicenseKey;
}
if (
features.backgroundPlayback ||
features.airPlay ||
features.pictureInPicture
) {
let backgroundModes = new Set(
config.modResults['UIBackgroundModes'] || []
);
backgroundModes.add('audio');
config.modResults['UIBackgroundModes'] = Array.from(backgroundModes);
}
if (!isTV) {
if (offlineFeatureConfig?.ios?.isEnabled) {
config.modResults['BitmovinPlayerOfflineSupportEnabled'] = true;
}
if (googleCastIosConfig) {
const appId = googleCastIosConfig.appId || 'FFE417E5';
const localNetworkUsageDescription =
googleCastIosConfig.localNetworkUsageDescription ||
'${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi network.';
config.modResults['NSBonjourServices'] = [
'_googlecast._tcp',
`_${appId}._googlecast._tcp`,
];
config.modResults['NSLocalNetworkUsageDescription'] =
localNetworkUsageDescription;
}
}
return config;
});
if (!isTV) {
config = withPodfileProperties(config, (config) => {
if (googleCastIosConfig) {
config.modResults['BITMOVIN_GOOGLE_CAST_SDK_VERSION'] =
googleCastIosConfig.version;
}
return config;
});
}
return config;
};
export default withBitmovinIosConfig;