Support for 2.0.2 ended on February 8, 2024 Please upgrade to the latest version. See: Versioning and Support Lifecycle.
The latest release of the Sync SDK for Android is v4.0.0. Separate artifacts for utilizing the SDK with Kotlin and Java are published on Maven Central.
implementation "com.twilio:sync-android-kt:4.0.0"
implementation "com.twilio:sync-android-java:4.0.0"
Starting from v4.0.0, Sync SDK provides two modules:
sync-android-kt
is targeted to be used from Kotlin apps. SyncClient
exposes suspend
methods to perform async operations. To use SyncClient
from your Kotlin app, add the following dependency to your project:1dependencies {2implementation "com.twilio:sync-android-kt:4.0.0"3}
See SyncClient documentation for details on how to create a SyncClient
.
sync-android-java
is targeted to be used from Java apps. SyncClientJava
exposes methods which receive listeners to perform async operations. To use SyncClientJava
from your Java app, add the following dependency to your project:1dependencies {2implementation "com.twilio:sync-android-java:4.0.0"3}
See SyncClientJava documentation for details on how to create a SyncClientJava
.
The Sync SDK now exposes dates using kotlinx.datetime.Instant
. If you are targeting Android devices running below API 26, you will need to enable coreLibraryDesugaring
to ensure compatibility. Follow the steps below:
1android {2compileOptions {3coreLibraryDesugaringEnabled true4}5}67dependencies {8"com.android.tools:desugar_jdk_libs:1.2.2"9}
For more information on using kotlinx.datetime
in your projects, visit the official documentation.
Here's an example of how to use the new SDK:
1val syncClient = SyncClient(applicationContext) { requestToken() }23// Create a new map4val map = syncClient.maps.create()56// Listen for item-added events flow7map.events.onItemAdded8.onEach { println("Item added: ${it.key}") }9.launchIn(MainScope())1011// Declare custom data type12@kotlinx.serialization.Serializable13data class MyData(val data: Int)1415// Add 10 items to the map16repeat(10) { index ->17map.setItem("key$index", MyData(index))18}1920// Read all items from the map21for (item in map) {22val myData = item.data<MyData>()23println("Key: ${item.key}, Value: ${myData.data}")24}2526// Remove the map27map.removeMap()
Please note that these changes may require modifications to your existing codebase to ensure compatibility with the new version of the SDK. We recommend thoroughly testing your application after updating to Sync SDK v4.0.0.
We hope you enjoy the new features and improvements in Sync SDK v4.0.0!
5edd0a6c2abad43681b54425dadddd71ee5c6b019c62a12e821c17343fd34465
implementation "com.twilio:sync-android:3.0.3"
fae097470c70fec1b5f967028abc74c9c12d9c89bc0ec4b51e5112bcbcee7663
implementation "com.twilio:sync-android:3.0.2"
c7a4470785cae0e3b2771d003d3b3a011e5ac2cd3aa14fbd8ccf5767269e8877
implementation "com.twilio:sync-android:3.0.1"
30b32eaa4248b0e15405001867359ddf1a0d848bb205140998ffdebf6bd8d2b2
implementation "com.twilio:sync-android:3.0.0"
44e140754fd7e41f0dddc16d3fd0ad507c78b3d01ef123f8a6f0cf65b5687feb
implementation "com.twilio:sync-android:2.0.2"
cb51f8c153741dcc8b05af5770fc17683219e57e85f659fbea19502fccd98c63
implementation "com.twilio:sync-android:2.0.1"
5e4c0afc5c688e832c2afe6e342febdefd9328afb93c80c717a5ef369d0f74c8
implementation "com.twilio:sync-android:2.0.0"
UNAUTHORIZED
error the ErrorInfo.code
is now 5 (was 1)e4cfe5f38e13a73fdda9815699546a7b7b8cedfc644f3568b3795dcd2cd21f1d
implementation "com.twilio:sync-android:1.1.0"
293868bd9e4f1b70898df1376728ec771a7befda8a8c7955bca59c2a12000f5c
implementation "com.twilio:sync-android:1.0.3"
a8e474a9ce48daf40b1f4d444a52580848fad3e649b4d8240b6a41b1721805f3
implementation "com.twilio:sync-android:1.0.2"
afb799129b7860e19e3060d3c36aad5ca5f490bc16669287d454c3ca88be752e
implementation "com.twilio:sync-android:1.0.1"
Starting from this release all artifacts are published on mavenCentral
instead of jcenter
.
Root build.gradle
have to be updated by adding mavenCentral()
repository:
1allprojects {2repositories {3mavenCentral()4}5}
bc416e2aa08aafbb148de797e6d633950640edefe6bb7740b1d52e66a08704b7
implementation "com.twilio:sync-android:1.0.0"
build.gradle
the following compile options, necessary to use Java8 syntax features:1compileOptions {2sourceCompatibility JavaVersion.VERSION_1_83targetCompatibility JavaVersion.VERSION_1_84}56// Also if kotlin is used in the project7kotlinOptions {8jvmTarget = '1.8'9}
List of renamed entities:
List
-> SyncList
ListIterator
-> SyncListIterator
ListObserver
-> SyncListObserver
ListPaginator
-> SyncListPaginator
Map
-> SyncMap
MapIterator
-> SyncMapIterator
MapObserver
-> SyncMapObserver
MapPaginator
-> SyncMapPaginator
Document
-> SyncDocument
DocumentObserver
-> SyncDocumentObserver
Stream
-> SyncStream
StreamObserver
-> SyncStreamObserver
Mutator
-> SyncMutator
Options
-> SyncOptions
ConnectionStateListener
-> SyncClientListener
SyncClient.setConnectionStateListener()
-> SyncClient.setListener()
InfiniteDuration
-> INFINITE_DURATION
SuccessListener
is interface now. So remove constructor invocation in Kotlin code to make it compile.
SyncOptions
is interface now. Use SyncOptions.create()
for creating new instance.
previousData
parameter added to SyncDocumentObserver.onRemoved()
callback.
Removed PageSort
parameter while querying items from SyncList
or SyncMap
. The order of items within the page is not guaranteed. Implement necessary sorting in application code if needed.
Returned error codes changed in number of cases.
dateUpdated
for all sync objects (SyncList, SyncMap, SyncMap.Item etc).onTokenAboutToExpire
and onTokenExpired
callbacks to SyncClientListener
.previousData
/previousItemData
is null in updated/removed callbacks for client who made the modification.onError()
callback after initialisation with invalid token.v1.0.1
or newer, if you got runtime error: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/getkeepsafe/relinker/ReLinker
implementation "com.twilio:sync-android:0.9.0"
javax.net.ssl.SSLSocket
), resulting in a noticeable decrease in final application size compared to previous release 0.8.7.implementation "com.twilio:sync-android:0.8.7"
implementation "com.twilio:sync-android:0.8.6"
implementation "com.twilio:sync-android:0.8.5"
StreamObserver.onRemoved()
event is received twice.implementation "com.twilio:sync-android:0.8.2"
implementation "com.twilio:sync-android:0.8.1"
implementation "com.twilio:sync-android:0.8.0"
compile "com.twilio:sync-android:0.7.2"
compile "com.twilio:sync-android:0.7.1"
compile "com.twilio:sync-android:0.7.0"
Synopsis of enhancements:
Migration tips:
FlowId has been removed globally; most methods that previously accepted a flowID now also accept metadata which can be null today if you are not specifying a TTL.
Most observer methods have changed signature. The individual remote and local observer methods have been combined into a single observer method for operations. Observers which previously received only an index or key will now also receive the full value. Most observer methods now also provide a EventContext object which will indicate whether the operation was locally or remotely initiated.
Update squashing:
Individual local operations will continue to return the status of each operation via their SuccessListener interface but updates sent to the server may be batched for efficiency. This means remote clients may not see every state update performed individually, but will instead see updates with the object's final updated state.
If you require updates to be treated as individual operations for purposes of notifying remote clients, it is recommended you schedule subsequent updates to occur after the completion of each operation.
Other enhancements and bugfixes:
compile "com.twilio:sync-android:0.6.3"
compile "com.twilio:sync-android:0.6.2"