fix(react-native-callkeep): add missing permissions for CallKeep inte… #285
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Recently, I wanted to add a feature to show the native call UI for iOS and Android. This was challenging due to missing documentation. I am not the only one facing this issue—see this comment. I have submitted a PR to improve the react-native-callkeep (expo) docs.
Typically,
react-native-callkeep(with@config-plugins/react-native-callkeep) is used together withreact-native-webrtc(and@config-plugins/react-native-webrtc).Both config plugins add some permissions, but if you only use
react-native-callkeep(with@config-plugins/react-native-callkeep), certain permissions are missing.For example, when using only
react-native-callkeep, yourapp.jsonmight look like this:{ "expo": { "newArchEnabled": false, "android": { "permissions": [ // These are added automatically by "@config-plugins/react-native-callkeep" // See: https://github.com/expo/config-plugins/blob/566f54e785147d88cb4c98490c3e536ee7ef3001/packages/react-native-callkeep/src/withCallkeep.ts#L118 "android.permission.BIND_TELECOM_CONNECTION_SERVICE", "android.permission.FOREGROUND_SERVICE", "android.permission.READ_PHONE_STATE", "android.permission.CALL_PHONE", // However, you still need these permissions: // See: https://github.com/sultanmyrza/react-native-callkeep/blob/aadf30d2250b622c8e054757ba1d626a2df79fd6/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java#L115 "android.permission.READ_PHONE_NUMBERS", "android.permission.RECORD_AUDIO" ], }, "plugins": [ "@config-plugins/react-native-callkeep" ], } }Solution
If you look at RNCallKeepModule.java, you will see that the following permissions are required in the Java code:
Test Plan
Manual Test Steps:
npx expo install react-native-callkeep @config-plugins/react-native-callkeepSample code for basic testing:
app/utils/callkeep.ts
app/_layout.tsx
app/(tabs)/index.tsx