config-plugins/react-native-webrtc
Config plugin to auto-configure react-native-webrtc
when the native code is generated (npx expo prebuild
). Upstream PR.
Versioning
Ensure you use versions that work together!
expo | react-native-webrtc | @config-plugins/react-native-webrtc |
---|
50.0.0 | 118.0.1 | 8.0.0 |
49.0.0 | 111.0.3 | 7.0.0 |
48.0.0 | 106.0.6 | 6.0.0 |
47.0.0 | 1.106.1 | 5.0.0 |
46.0.0 | 1.100.0 | 4.0.0 |
45.0.0 | 1.100.0 | 3.0.0 |
44.0.0 | 1.92.2 | 2.0.0 |
43.0.0 | 1.92.2 | 1.0.0 |
Expo SDK 42 uses react-native@0.63
which doesn't work with react-native-webrtc
, specifically iOS production builds fail. Meaning this package is only supported for Expo SDK +43.
Expo installation
This package cannot be used in the "Expo Go" app because it requires custom native code.
First install the package with yarn, npm, or npx expo install
.
npx expo install react-native-webrtc @config-plugins/react-native-webrtc
After installing this npm package, add the config plugin to the plugins
array of your app.json
or app.config.js
:
{
"expo": {
"plugins": ["@config-plugins/react-native-webrtc"]
}
}
Next, rebuild your app as described in the "Adding custom native code" guide.
Event Target Shim
SDK 50 and greater.
React Native uses event-target-shim@5
which is not compatible with react-native-webrtc
's dependency on event-target-shim@6
. To fix this, you may need to add a redirection in your metro.config.js
file:
const { getDefaultConfig } = require("expo/metro-config");
const resolveFrom = require("resolve-from");
const config = getDefaultConfig(__dirname);
config.resolver.resolveRequest = (context, moduleName, platform) => {
if (
moduleName.startsWith("event-target-shim") &&
context.originModulePath.includes("react-native-webrtc")
) {
const eventTargetShimPath = resolveFrom(
context.originModulePath,
moduleName
);
return {
filePath: eventTargetShimPath,
type: "sourceFile",
};
}
return context.resolveRequest(context, moduleName, platform);
};
module.exports = config;
API
The plugin provides props for extra customization. Every time you change the props or plugins, you'll need to rebuild (and prebuild
) the native app. If no extra properties are added, defaults will be used.
cameraPermission
(string): Sets the iOS NSCameraUsageDescription
permission message to the Info.plist
. Defaults to Allow $(PRODUCT_NAME) to access your camera
.microphonePermission
(string): Sets the iOS NSMicrophoneUsageDescription
permission message to the Info.plist
. Defaults to Allow $(PRODUCT_NAME) to access your microphone
.
app.config.js
export default {
plugins: [
[
"@config-plugins/react-native-webrtc",
{
cameraPermission: "Allow $(PRODUCT_NAME) to access your camera",
microphonePermission: "Allow $(PRODUCT_NAME) to access your microphone",
},
],
],
};
Important Notes
- For iOS, this plugin disables Bitcodes for all builds (required).
- For Android, this plugin disables desugaring in
gradle.properties
: android.enableDexingArtifactTransform.desugaring=false
and the minimum deployment target is changed to 24
(from 21
) which may break other packages in your app!
Manual Setup
For bare workflow projects, you can follow the manual setup guides: