Release Notes - Android SDK
Please Note:
If you are implementing Automatic Audio Routing (AAR) in Android version 10 or prior, users may experience inconsistent behavior across different devices, particularly with non-premium handsets. This limitation has been fixed by enhancements made by Google in Android version 11 and later.
6.12.4
-
Fix a bug that could cause
IllegalArgumentException
being thrown when AAR mode was enabled. - Improve resource cleanup process when the call ends.
-
Fix a bug that caused
RejectedExecutionException
being thrown insideMissingMediaStreamWarningController
when call has ended.
6.11.3
-
Fix a bug that caused unnecessary invocation of
initPlayout
andinitRecording
methods after the call has ended and could cause application to crash. - Improve initialization process of Sinch client. Postpone video subcomponents initialization until video call is created.
6.10.22
- Improve handling of extending instance expiry.
- Fix an issue causing wrong ICE states being assigned when multiple B sides were involved in the call.
-
Add
CallController.setWebRtcCallConfiguration(WebRtcCallConfiguration)
allowing to filter ICE candidates used when creating the peer connection. - Issue call quality warning events exclusively after the call is established.
-
Expose
CallDetails.progressedTime
,CallDetails.rungTime
andCallDetails.answeredTime
. -
Add
CallState.Answered
. This state is reached when the call has been answered by the callee but the media (ICE) didn't connect yet. - Improve logic connected with cleanup of audio resources once the call is over.
-
Add
CallListener::onCallRinging
callback. It is invoked for the caller only, once the callee receives the call (receives the push notification and propagates is to Sinch SDK). -
Deprecate
UserController
. Build and startSinchClient
directly instead of registering a user viaUserController
. - Improve handling of updating instance expiry when using UserController.
- Improve Sinch DB initialization process. Provide more detailed description of possible failure during it's setup.
6.9.19
- Fix a bug that could cause setting wrong call results for an incoming call.
-
Add
CallListener::onCallAnswered
callback. It is invoked when the callee answers the call. See CallListener documentation for more information -
Change
CallListener::onCallEstablished
callback invocation logic. It is now triggered when the callee answered the call and media connection is established. See CallListener documentation for more information. - Add internal reporting of ICE candidate pairs.
- Add 'ZeroAudioLevelWarningEvent' call quality warning event.
-
Adjust
ConstantAudioLevelWarning
time span threshold (increased from 8 to 20 seconds). -
Fix bug that caused
startTime
property of the call details to be incorrectly set for the B side when it was the callee that terminated the call. -
Add
Call.qualityController
property for accessing call quality controller for given call. DeprecateExperimental.callController
. -
Improve ICE exchange process during the call setup, resulting in reducing
missingMediaStream
warnings being triggered and then fastly recovered during initial seconds of the call. -
Fix bug that caused AAR implementation on pre Android 31 devices to ignore use
useSpeakerphoneState
parameter.
6.8.35
-
Fix bug that caused AAR implementation on pre Android 31 devices to ignore use
useSpeakerphoneState
parameter.
6.8.33
- Fix issue that prevented consumer APP from getting audio focus during active VoIP call.
-
Add
UserController.setSinchLogCallback
method. It is now possible to access Sinch SDK logs at UserController level before creating Sinch client. Ignore the change if you're not using UserController as a standalone component. -
Improve automatic routing logic. On Android 31+ devices this functionality no longer requires any
BLUETOOTH
permissions. You still need to request it on lower APIs if you app supports them. SeeAudioController
docs for more information. -
Refactor
setRespectNativeCalls
method tofun setRespectNativeCalls(onIncomingSinchCall: Boolean, duringSinchCall: Boolean = false)
Auto denial of incoming Sinch call when GSM call is active no longer requiresandroid.permission.READ_PHONE_STATE
permission. SeeCallController
docs for more information aboutsetRespectNativeCalls
method changes. -
Bump
minSdkVersion
to 21. -
Add
CallController.setRespectVoIPCalls(onIncomingSinchCall: Boolean, duringSinchCall: Boolean = false)
. SeeCallController
docs for more information about that functionality. -
Add filtering of WARN & ERROR level WebRTC messages that are related to WebRTC internal issues that are handled
gracefully. If you intend to see all WebRTC logs set
SinchLogger.minLogLevel
toLogLevel.TRACE
.
6.7.11
- Improve process of initializing video calling connected components (EGL). They are now lazily created only when needed (video calling is used).
-
Improve way of handling log messages:
-
Add
onLogMessage(level: Int, area: String, message: String, throwable: Throwable?)
callback. SDK can now pass an optional 'throwable' to log, if the message is bound with some specific JVM error. -
Deprecate
onLogMessage(level: Int, area: String, message: String)
callback. All log messages are now emitted by those callbacks. Your application should implement only one of it as both callbacks are fired when Sinch SDK issues log message. See 'SinchLogger.minLogLevel' property to adjust logging level.
-
Add
6.6.2
- Fix bug causing potential signalling problems during ongoing call.
6.2.7
- Make native debug symbols compatible with Crashlytics. See README.md in debug symbols archive for more information.
- Improve initializing of video calling functionality. Clients not using video calling should expect memory consumption improvement.See how the Sinch In-app Voice and Video SDK for Android is evolving and find out about new features and bug fixes.
- Creating a SinchClient with empty FCM or HMS registration token is now forbidden (IllegalArgumentException is thrown).
6.1.2
- Minimise number of calls to Sinch Platform REST API.
- Improve handling of default audio device during call when Bluetooth device is connected.
- Distribute Kotlin documentation (dokkaHtml format). Documentation is available inside 'docs/reference' folder of the SDK archive and online at https://download.sinch.com/android/latest/reference/index.html . If you still need documentation in Javadoc format it is available as a part of the Sinch SDK archive inside 'docs' folder.
6.0.2
- Fix sample applications crash when during the call app was moved to background and then, back into the foreground.
- Refactor SDK files into Kotlin. All API methods that could throw IllegalArgumentException when passing null values are now handled on language level and @NonNull / @Nullable annotations when referencing from Java. SDK can still be used in Java Android applications. Only extra step required is that you add 'org.jetbrains.kotlin:kotlin-stdlib' library inside your build.gradle file. See samples for reference.
5.10.15
- Improve handling of default audio device during call when Bluetooth device is connected.
5.10.7
- Update WebRTC to M108. This update moves away from WebRTC version that was marked as vulnerable by Google. See https://support.google.com/faqs/answer/12577537 for more information.
- Improve AudioController disable / enable speaker logic when Bluetooth device is connected
5.9.4
- Fix issue that could cause native crash when initializing WebRTC library.
- Improve caching of instance data. Clients should expect to have onCredentialsRequired callback being executed less often.
5.8.2
- Fix issue causing audio not being streamed properly when callee didn't initially grant microphone permissions.
5.7.3
- Add automatic hang up when call is lingering in failed state for too long.
5.6.5
- Improve creating the call when application is not in foreground.
5.5.24
- Remove SinchHelpers class.
- Add SinchPush class responsible for handling logic connected with delivering push messages for incoming calls.
- Add SinchClient.builder() and UserController.builder() to access SinchClient and UserController builders respectively.
- Remove deprecated SinchClient.startListeningOnActiveConnection() and SinchClient.stopListeningOnActiveConnection().
- Add SinchClient.unregisterPushToken(PushTokenUnregistrationCallback). Client no longer needs to create UserCojjntroller to remove the push token.
- Add PushTokenUnregistrationCallback informing about push token unregistration events.
- Fix bug connected with logging audio routing changes.
- Add possibility to specify CLI while creating each outgoing call. See updated CallController call initialization methods for reference.
- Remove SinchClientBuilder.callerIdentifier() method that assigned a common CLI to entire Sinch client instance.
- Introduce MediaConstrains object for in app calling. Combine CallController.callUserVideo() and CallController.callUser() methods into single CallController.callUser(MediaConstraints). To initiate a video call create a MediaConstraint object passing 'true' into the constructor. See samples directory for fully working examples.
- Rename CallClient to CallController.
- Fix exception handling configuration for ProGuard code obfuscation. SinchClientBuilder.build() and UserControllerBuilder.build() can throw IOException. Clients should update their applications to handle these exceptions. See samples for possible implementation.
- Update buildscript sample files.
- Rename PushProfile to PushConfiguration
5.4.2
- Fix minor bugs connected with automatic routing functionality
5.3.5
- Add audio routing logging.
5.2.4
- Fix issue that prevented user that did not start Sinch client for over a year authenticating on Sinch backend.
5.1.6
- Fix authorization problems connected with incorrect timestamp parsing when running on 32-bit simulator.
5.0.2
- Refactor SinchClientBuilder to follow UserControllerBuilder pattern for specifying Push Profile configuration.
- Add FcmPushProfileBuilder allowing to specify senderID - Firebase sender ID to be used by the Sinch SDK for sending push notifications registrationToken - FCM registration token for this device
- Remove Firebase and Firebase Messaging dependency. Sinch SDK is no longer responsible for acquiring FCM registration tokens using its sender ID. Client should use FcmPushProfileBuilder while creating SinchClient and UserController instances, to provide parameters (Firebase sender ID and FCM registration token) needed to initialize FCM Managed Push functionality. Client is also responsible for re-registering Push Profile whenever FCM token changes. See FcmListenerService.java at sinch-rtc-sample-video-push to see possible code implementation of above.
- Remove SinchClient.setSupportManagedPush(boolean). Managed push functionality is currently automatically enabled if PushProfile is defined while building SinchClient instance. If SinchClient instance is built without defining any push profile the functionality is disabled.
- Deprecate SinchClient.startListeningOnActiveConnection(). Remove non-push sample application.
4.11.16
- Upgrade gradle build tools versions of samples.
4.11.14
- Fix issue that prevented user that did not start Sinch client for over a year authenticating on Sinch backend.
4.11.3
- Fix screenshot and filter video sample applications threading issues.
4.10.18
- Update WebRTC to M96.
4.9.21
-
Refactor
AudioController.enableAutomaticAudioRouting()
to acceptAudioController.AudioRoutingConfig
parameter. - Fix potential crash in the JNI layer that could happen if null-body reply is unexpectedly returned from the backend.
4.8.6
-
Add
android:exported
attribute to the internal service manifest in conformance with new Android S+ rules (Android 12).
4.7.3
- Fix crash on Huawei devices that support Google Play Services when Huawei HMS Messaging is used.
4.6.8
-
Fix crash in the
AudioManagerInternal
caused by unregistering of not-yet-registered Wired Headset Receiver.
4.5.8
- Stop storing Sinch FCM token in SharedPreferences. Sometimes when the new FCM token is acquired, if update of the SharedPreferences fails/slow - the old FCM token is sent again to the Sinch backend.
4.4.5
-
Removed
SinchClient.setMediaHandover(boolean)
,SinchClientBuilder.enableMediaHandover(boolean)
, andCall.setMediaHandover()
. Media handover and reconnection behaviour is now handled internally.
4.3.9
-
Check CAMERA permission before video capture starts to avoid crash in case the user revoked permission.
If not granted - black video. If granted during the call, video can be resumed with call to
Call.resumeVideo()
. The responsibility to ensure that CAMERA permission is granted lies on the application. - Fixed crash when setting video frame listeners during audio-only call.
-
Removed
Beta.setMediaHandoverConfig(SinchClient client, MediaHandoverConfig config)
andMediaHandoverConfig
class as a whole. Media handover behaviour is now handled internally.
4.2.5
- Fixed memory leak in LocalVideoFrameListener and RemoteVideoFrameListener implementations.
4.1.4
- Switch to new release tools and process.
4.0.7
- Fixed crash in SinchClient when the client is terminated during incoming call processing.
-
Added VideoController
setLocalVideoResizeBehaviour()
to allow full-screen local video experience.
4.0.6
- Failure of internal database initialization at SinchClient/UserController creation time will now cause IOException, instead of failing silently.
- Fixed rare crash in SinchClient that happened during 'fast' start after graceful termination.
- Updated sample application with SinchClient lifecycle management comments.
4.0.5
-
Aligned SinchClient registration experience with UserController's one by extending SinchClientListener
interface and providing a way to register a user with the HMS Push Token via SinchClient by adding
Huawei HMS specific methods to SinchClientBuilder:
- hmsDeviceToken(String deviceToken);
- hmsApplicationId(String applicationId);
- Extended SinchClientListener interface by both UserRegistrationCallback and PushTokenRegistrationCallback interfaces.
- Removed SinchClientListener.onRegistrationCredentialsRequired(SinchClient client, ClientRegistration registrationCallback) in favor of inherited UserRegistrationCallback.onCredentialsRequired(ClientRegistration registrationCallback).
-
Renamed PushTokenRegistrationCallback methods to follow the same naming pattern:
- tokenRegistered() -> onPushTokenRegistered()
- tokenRegistrationFailed(...) -> onPushTokenRegistrationFailed(...)
- Removed deprecated SinchClient's stop() and unregisterPushProfile() APIs.
4.0.4
- Removed MissingFCMException.
- Added SinchHelper methods to check availability of the Google FCM or Huawei HMS services.
4.0.3
- Moved from deprecated appcompat to AndroidX.
4.0.2
- Fixed potential crash in logging when receiving weird-looking media streams.
4.0.1
- Added support specifying/modifying call headers via ICE callback response.
4.0.0
- Sinch environment host changed to ocra.api.sinch.com
-
Removed support for legacy push data (
SinchClient.registerPushNotificationData()
). -
Removed
ErrorType.CAPABILITY
,ErrorType.OTHER
. AddedErrorType.GENERIC
. -
Removed deprecated
SinchClient.stop()
(andSinchClientListener.onClientStopped()
). UseSinchClient.terminateGracefully()
instead. -
CallDetails
getStartedTime()
,getEstablishedTime()
andgetEndedTime()
returnjava.util.Date
instead of long. -
AudioController has new APIs:
isMute()
andisSpeakerOn()
. - Fixed AudioController bug that change microphone state when disengaging Automatic Audio Routing.