Releases: sendbird/sendbird-uikit-react-native
v3.11.1
3.11.1 (2025-10-13)
Features
- add support for expo-video and expo-audio for Expo SDK 54 (39c07ca)
Notes
For Expo 54 and above, you should use the expo-audio and expo-video
packages instead of expo-av.
import * as ExpoAudio from 'expo-audio';
import * as ExpoVideo from 'expo-video';
export const platformServices: SendbirdUIKitContainerProps['platformServices'] = {
media: createExpoMediaService({
avModule: ExpoVideo,
}),
player: createExpoPlayerService({
avModule: ExpoAudio,
}),
recorder: createExpoRecorderService({
avModule: ExpoAudio,
}),
};
v3.11.0
3.11.0 (2025-09-16)
Features
- add react-native-nitro-sound for React Native 0.81 support (7dcf0cc)
Notes
For React Native 0.81 and above, you should use the react-native-nitro-sound
package instead of react-native-audio-recorder-player
.
import * as AudioRecorderPlayer from 'react-native-nitro-sound';
export const platformServices: SendbirdUIKitContainerProps['platformServices'] = {
player: createNativePlayerService({
audioRecorderModule: AudioRecorderPlayer,
}),
recorder: createNativeRecorderService({
audioRecorderModule: AudioRecorderPlayer,
}),
};
v3.10.3
3.10.3 (2025-09-10)
Bug Fixes
- revert: improve keyboard avoidance behavior for Android API 35+
Temporary Workaround for Android Keyboard Issue (Android SDK 35+)
A related issue has been reported on the React Native GitHub repository and is expected to be addressed in a future release.
In the meantime, we are planning to revert the keyboard handling logic in Sendbird RN UIKit to its original implementation.
This issue is specifically related to the edge-to-edge layout behavior introduced in Android SDK 35+, which causes unexpected layout shifts when the keyboard appears.
Until the React Native team resolves the issue, customers using Android SDK 35+ are advised to apply the workaround described below.
⸻
📌 Action Required: Add the Following Code to MainActivity.kt
Please update your MainActivity.kt as shown below:
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.core.graphics.Insets
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
class MainActivity : ReactActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(null)
val rootView: View = findViewById(android.R.id.content)
ViewCompat.setOnApplyWindowInsetsListener(rootView) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
val ime = insets.getInsets(WindowInsetsCompat.Type.ime())
v.updatePadding(
left = systemBars.left,
right = systemBars.right,
bottom = ime.bottom
)
WindowInsetsCompat.CONSUMED
}
}