Release Notes
4.1.0 - May 11, 2022
Added
- Support for
call:transfer
withinNexmoCall
- Added
NexmoLegTransferEvent
containing details of previous and current conversation when a call is transferred - Added
CallEventListener
to receiveNexmoLegTransferEvent
with new members when a call is transferred to a new conversation.
NexmoCallEventListener callEventListener = new NexmoCallEventListener() {
@Override
public void onLegTransfer(NexmoLegTransferEvent event, NexmoMember member) {
Log.d(TAG, "Call Transferred");
}
};
- Expose
pushNotificationTTL
at theNexmoClient.Builder()
level to set registered device Push TTL - New public events
NexmoSubmittedEvent
,NexmoRejectedEvent
andNexmoUndeliverableEvent
for messages states. - New Message state listeners added to
NexmoMessageEventListener
interface.
NexmoCallEventListener messageEventListener = new NexmoMessageEventListener() {
@Override
public void onSubmittedReceipt(@NonNull NexmoSubmittedEvent event) {
Log.d("onSubmittedReceipt", "Got [" + event + "] from:" + event.getFromMember());
}
@Override
public void onRejectedReceipt(@NonNull NexmoRejectedEvent event) {
Log.d("onSubmittedReceipt", "Got [" + event + "] from:" + event.getFromMember());
}
@Override
public void onUndeliverableReceipt(@NonNull NexmoUndeliverableEvent event) {
Log.d("onSubmittedReceipt", "Got [" + event + "] from:" + event.getFromMember());
}
};
4.0.4 - Apr 14, 2022
Fixed
- Changed timestamp default from local timezone to UTC
4.0.3 - Apr 4, 2022
Fixed
- Added check to ensure user logged in during setup of prewarm outbound call.
- Changed timestamp default to UTC without time zone.
4.0.2 - Mar 9, 2022
Enhancements
- WebRTC dependency upgraded to version
84.0.22
.
4.0.1 - Jan 21, 2022
Fixed
- Added check to ensure user logged in before SDK tries to process push event.
4.0.0 - Dec 7, 2021
Added
-
NexmoConversation.sendMessage(message, listener)
to sendNexmoMessage
to a conversation. -
NexmoClient.uploadAttachment(attachment, listener)
method to sendNexmoAttachmentType
. -
NexmoMessage
represents a message ofEMessageEventType
type to send. -
EMessageEventType
for messages of typetext
,image
,audio
,video
,file
,template
,vcard
,custom
andlocation
. -
NexmoChannelType
added channels of typesms
,mms
,whatsapp
,viber
andmessenger
. -
NexmoAttachmentType
to upload an attachment message to Vonage Media Service. -
NexmoMessageEvent
represents the member message status event dispatched into theNexmoMemberMessageStatusEventListener
.
Enhancements
- WebRTC dependency upgraded to version
84.0.0
.
Deprecated
-
NexmoConversation.sendText(text, listener)
method. UseNexmoConversation.sendMessage(message, listener)
method instead. -
NexmoConversation.sendAttachment(file, listener)
method. UseNexmoClient.uploadAttachment(attachment, listener)
andNexmoConversation.sendMessage(message, listener)
method instead.
3.3.0 - Nov 22, 2022
Added
-
NexmoClient.Builder
'srestEnvironmentHostPinning
andenvironmentHostPinning
methods added to enable HTTP and web-socket SSL pinning. -
NexmoPinningConfig.fromPublicKeys(...)
method to create a public-key-based pinning configuration.
nexmoClient = new NexmoClient.Builder()
.environmentHostPinning(NexmoPinningConfig.fromPublicKeys("publicKeyHash"))
.build(context);
- New
ConnectionStatusReason
caseSSL_PINNING_ERROR
whenDisconnected
due to invalid public key found backend connection.
connectionStateListener = NexmoConnectionListener { status, reason ->
when(status){
NexmoConnectionListener.ConnectionStatus.DISCONNECTED-> {
if (reason == NexmoConnectionListener.ConnectionStatusReason.SSL_PINNING_ERROR) {
// Notify UI
}
}
}
}
3.2.0 - Oct 19, 2021
Added
-
NexmoClient.Builder.autoMediaReoffer(autoMediaReoffer)
to allow to automatically reconnect media when network interfaces changes. -
EMediaConnectionState
enumerate. -
NexmoMediaStatusListener
to receive media connection state changed notification. -
NexmoConversation.reconnectMedia()
to trigger a media reconnection. -
NexmoClient.reconnectCall(conversationId, legId, listener)
to reconnect a call given a conversation id and a leg id. -
NexmoClient.getUserSessions(userId, pageSize, order, listener)
to fetch a paginated list of active user sessions.
Version 3.1.1 - Oct 18, 2021
Added
- Change socket
connectionListeners
fromHashSet
toArraySet
.
Version 3.1.0 - Sep 6, 2021
Added
-
NexmoClient.inAppCall(username, listener)
method to perform in-app calls. -
NexmoClient.serverCall(callee, customData, listener)
method to perform server calls, optionally specifyingcustomData
.
Deprecated
-
NexmoClient.call(callee, callType, listener)
method. -
NexmoCallHandler
enumerate.
Version 3.0.1 - Jun 16, 2021
Enhancements
- Fixed a bug on DTMF dispatch of a callback to event_url
- Fixed a bug of not receiving typing events from Web to Android
Version 3.0.0 - Jun 1, 2021
Added
- Added
NexmoMemberSummary
returned byconversation.getMembers(pageSize, order, listener)
(paginated), representing a subset member information. - Added
memberEvent.getInvitedBy()
that represents the inviter name, if exists. - Added
NexmoEventEmbeddedInfo
to all events returned byevent.getEmbeddedInfo()
and containing theNexmoUser
linked to the event. - Added
conversation.getMember(memberId, listener)
returning the member given its identifier.
Enhancements
- Improve the javadoc documentation.
- Improve
callServer
setup time by pre-warming leg. - Disable media after RTC hangup event.
Breaking changes
- Removed
NexmoCallMember
, replaced withNexmoMember
. - Removed
callMember.getCallStatus()
, moved tocall.getMemberCallStatus(member)
. - Removed
callMember.mute(boolean, listener)
moved tomember.enableMute(listener)
andmember.disableMute(listener)
. - Removed
callMember.earmuff(boolean, listener)
moved tomember.enableEarmuff(listener)
andmember.enableEarmuff(listener)
. - Removed
conversation.getAllMembers()
moved toconversation.getMembers()
(paginated). - Removed
NexmoConversationListener.onMemberUpdated
, replaced withNexmoMemberEventListener
that provideonMemberInvited
,onMemberAdded
,onMemberRemoved
subscribing byconversation.addMemberEventListener()
. - Renamed
call.getCallMembers()
tocall.getAllMembers()
. - Renamed
call.getMyCallMember()
tocall.getMyMember()
. - The
legs
endpoint should be included inacl
paths onJWT
token creation.
"acl": {
"paths": {
...,
"/*/legs/**": {}
}
}
Version 2.8.1 - Dec 14, 2020
Enhancements
- Fixed value inconsistency on attributes
displayName
andimageUrl
forNexmoUser
object. - Improved outbound call and conversation stability.
Version 2.8.0 - Nov 19, 2020
Changed
- Renamed
NexmoCallMemberStatus.CANCELED
toNexmoCallMemberStatus.CANCELLED
.
Enhancements
- Notified with
NexmoCallMemberStatus.CANCELLED
on listeneronMemberStatusUpdated(NexmoCallMemberStatus memberStatus, NexmoCallMember callMember)
for call hang up.
Version 2.7.1 - Oct 27, 2020
Enhancements
- Improved outbound call stability.
Version 2.7.0 - Sep 24, 2020
Added
- Expose the reason
NETWORK_ERROR
on connection statusDISCONNECTED
for the listeneronConnectionStatusChange(ConnectionStatus status, ConnectionStatusReason reason)
.
Version 2.6.5 - Aug 24, 2020
Enhancements
- Improved SDK logs implementation and socket connection stability.
Version 2.6.4 - May 19, 2020
New
- We have split our artifacts from this version, so custom maven repository has to be added to the project:
//Groovy - build.gradle
allprojects {
repositories {
…
maven {
url "https://artifactory.ess-dev.com/artifactory/gradle-dev-local"
}
}
}
// Kotlin Gradle script - build.gradle.kts
allprojects {
repositories {
…
maven("https://artifactory.ess-dev.com/artifactory/gradle-dev-local")
}
}
Enhancements
- Improved user-agent SDK version reporting.
Version 2.6.3 - May 4, 2020
Fixed
- Changed visibility of
Nexmo.page.isPrevPageExist()
topublic
.
Version 2.6.2 - April 29, 2020
Fixed
- Potential
NullPointerException
when processing push notifications during client login.
Version 2.6.1 - April 22, 2020
Added
- Expose the interface
NexmoDTMFEventListener
to subscribe for DTMF events onNexmoConversation
.
Version 2.6.0 - April 20, 2020
Added
- Expose connection status
isConnected
inNexmoClient
.
NexmoClient.get().isConnected()
Fixed
- Avoid invoking
login
multiple times when the user is already connected.
Version 2.5.1 - April 20, 2020
Enhancements
- Improved single ICE candidate gathering implementation.
Version 2.5.0 - March 25, 2020
Added
- Add
useFirstIceCandidate
parameters toNexmoClient.Builder
nexmoClient = new NexmoClient.Builder().useFirstIceCandidate(true/false).build(context);
Version 2.4.0 - March 3 , 2020
Added
- Add filter by state to
getConversationsPage
inNexmoClient
.
NexmoClient.get().getConversationsPage(50, NexmoPageOrderDesc, "JOINED", new NexmoRequestListener<NexmoConversationsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoConversationsPage result){
//Get the current page conversations -Sync
Collection<NexmoConversation> conversations = result.getData()
//Get the next page -Async
result.getNext(new NexmoRequestListener<NexmoConversationsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoConversationsPage result){
}
})
//Get the previous page -Async
result.getPrev(new NexmoRequestListener<NexmoConversationsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoConversationsPage result){
}
})
}
});
Version 2.3.0 - February 11, 2020
Added
- Add
updateAsDelivered
andUpdateAsSeen
toNexmoAttachmentEvent
andNexmoTextEvent
as helper method to update event locally aftermarkAsSeen
ormarkAsDelivered
has been successful.
NexmoTextEvent.markAsDelivered(object: NexmoRequestListener<Any>{
override fun onSuccess(result: Any?) {
Log.d(TAG, TAG + "onTextEvent.markAsDelivered():onSuccess with: " + result.toString())
NexmoTextEvent.updateAsDelivered(my_member_id, Date.now())
}
})
Fixed
- Fix
markAsSeen
andmarkAsDelivered
forNexmoTextEvent
andNexmoAttachmentEvent
Changed
- Upgrade dependency libraries please add to your build Gradle
android {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Version 2.2.0 - January 31, 2020
Added
- Add support for Custom Push Notifications, using
processNexmoPush()
,processPushNotification()
is deprecated
if (NexmoClient.isNexmoPushNotification(message!!.data)) {
val pushListener = object : NexmoPushEventListener {
override fun onIncomingCall(nexmoCall: NexmoCall?) {
Log.d(TestAppMessagingService.TAG, "$TAG:TestAppMessagingService:onIncomingCall() with: $nexmoCall")
}
override fun onError(nexmoError: NexmoApiError?) {
Log.d(TestAppMessagingService.TAG, "$TAG:TestAppMessagingService:onError() with: $nexmoError")
}
override fun onNewEvent(event: NexmoEvent?) {
Log.d(TestAppMessagingService.TAG, "$TAG:TestAppMessagingService:onNewEvent() with: $event")
}
}
NexmoPushPayload nexmoPushPayload = nexmoClient.processNexmoPush(message!!.data, pushListener)
when(nexmoPushPayload.pushTemplate){
Default ->
// you can use nexmoPushPayload.eventData if needed
Custom ->
// got nexmo custom push. 😀
// you should parse nexmoPushEvent.customData your backend had defined.
}
}
- Add
markAsDelivered()
method toNexmoTextEvent
andNexmoAttachmentEvent
NexmoTextEvent.markAsDelivered(object: NexmoRequestListener<Any>{
override fun onSuccess(result: Any?) {
Log.d(TAG, TAG + "onTextEvent.markAsDelivered():onSuccess with: " + result.toString())
}
override fun onError(error: NexmoApiError) {
Log.d(TAG, TAG + "onTextEvent.markAsDelivered():onError with: " + error)
}
})
- Add
markAsSeen()
method toNexmoTextEvent
andNexmoAttachmentEvent
NexmoAttachmentEvent.markAsSeen(object: NexmoRequestListener<Any>{
override fun onSuccess(result: Any?) {
Log.d(TAG, TAG + "onAttachmentEvent.markAsSeen():onSuccess with: " + result.toString())
}
override fun onError(error: NexmoApiError) {
Log.d(TAG, TAG + "onAttachmentEvent.markAsSeen():onError with: " + error)
}
})
Version 2.1.2 - January 12, 2020
Added
- Add annotation of
PermissionRequired
for function that start media:NexmoClient.call
,NexmoCall.answer
,NexmoConvesation.enableMedia
class MyAcitivity MakeCallActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState){
//Call requires permission which may be rejected by user:
//code should explicitly check to see if permission is available (with 'checkPermission')
//or explicitly handle a potential 'SecurityException'
NexmoClient.get().call("1234567890", NexmoCallHandler.SERVER, new NexmoRequestListener<NexmoCall>(){
@Override
void onError(NexmoApiError error) {
Log.d("NexmoCallListener", "onError call:" + error.toString())
}
@Override
void onSuccess(NexmoCall call) {
Log.d("NexmoCallListener", "onSuccess call:" + cal.toString())
}
});
}
}
Removed
- Remove require for permission
PROCESS_OUTGOING_CALLS
- Remove require for permission
READ_PHONE_STATE
Version 2.1.0 - January 01, 2020
Added
- Add
clearNexmoEventsListeners
method inNexmoConversation
to clear all listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to events
myConversation.addMemberEventListener(new NexmoMemberEventListener(){
//implement functions
}
});
myConversation.addCustomEventListener(new NexmoCustomEventListener(){
//implement functions
});
//Add more listeners
}
@Override public void onStop(){
//Clear all listeners
myConversation.clearNexmoEventsListeners();
}
}
- Add
clearMemberEventListeners
method inNexmoConversation
to clear allNexmoMemberEventListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoMemberEvent
myConversation.addMemberEventListener(new NexmoMemberEventListener(){
});
}
@Override public void onStop(){
myConversation.clearMemberEventListeners();
}
}
- Add
clearCustomEventListeners
method inNexmoConversation
to clear allNexmoCustomEventListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoCustomEvent
myConversation.addCustomEventListener(new NexmoCustomEventListener(){
});
}
@Override public void onStop(){
myConversation.clearCustomEventListeners();
}
}
- Add
clearLegStatusEventListeners
method inNexmoConversation
to clear allNexmoLegStatusEventListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoLegStatusEvent
myConversation.addLegStatusEventListener(new NexmoLegStatusEventListener(){
});
}
@Override public void onStop(){
myConversation.clearLegStatusEventListeners();
}
}
- Add
clearDTMFEventListeners
method inNexmoConversation
to clear allNexmoDTMFEventListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoDTMFEvent
myConversation.addDTMFEventListener(new NexmoDTMFEventListener(){
});
}
@Override public void onStop(){
myConversation.clearDTMFEventListeners();
}
}
- Add
clearMessageEventListeners
method inNexmoConversation
to clear allNexmoMessageEventListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoMessageEvent
myConversation.addMessageEventListener(new NexmoMessageEventListener(){
});
}
@Override public void onStop(){
myConversation.clearMessageEventListeners();
}
}
- Add
clearNexmoConversationListeners
method inNexmoConversation
to clear allNexmoConversationListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoConversation
myConversation.addNexmoConversationListener(new NexmoConversationListener(){
});
}
@Override public void onStop(){
myConversation.clearNexmoConversationListeners();
}
}
- Add
clearTypingEventListeners
method inNexmoConversation
to clear allNexmoTypingEventListener
listeners
class MyActivity extends Activity{
NexmoConversation myConversation;
@Override public void onStart(){
//Add listener to NexmoTypingEvent
myConversation.addTypingEventListener(new NexmoTypingEventListener(){
});
}
@Override public void onStop(){
myConversation.clearTypingEventListeners();
}
}
- Add
NexmoMember
parameter toNexmoMemberEvent
with respect to theNexmoMember
acted on by:
NexmoConversation myConversation;
myConversation.addMemberEventListener(new NexmoMemberEventListener{
void onMemberInvited(@NonNull final NexmoMemberEvent event){
//The invitee member
event.getMember()
//the inviter member
event.getFromMember()
}
});
Fixed
- dispatch
NexmoAttachmentEvent
with respect toNexmoConversation
NexmoConversation myConversation;
myConversation.addNexmoMessageEventListener(new NexmoMessageEventListener(){
void onAttachmentEvent(@NonNull final NexmoAttachmentEvent attachmentEvent){
//handle attachment event
}
});
- dispatch
NexmoMediaEvent
with respect toNexmoConveration
- dispatch
NexmoMediaActionEvent
with respect toNexmoConveration
- make
NexmoDTMFEvent
inheritanceNexmoEvent
-
NexmoTextEvent.equals
to usesuper.equals
-
NexmoConversation.getCreationDate
to returnDate
java object -
NexmoEvent.getCreationDate
fixIllegalArgumentException
2.0.0 - 2019-12-22
Added
-
Add filter by
EventType
inNexmoConversation.getEvents
```java NexmoConversation myConversation //Get all text event for a specifc conversation myConversation.getEvents(10, NexmoPageOrderDesc, "text", new NexmoRequestListener{ void onError(@NonNull NexmoApiError error){ } void onSuccess(@Nullable NexmoEventsPage result){ Collection
textEvents = result.getData() } }); //Get all member event for a specifc conversation myConversation.getEvents(10, NexmoPageOrderDesc, "member:*", new NexmoRequestListener { void onError(@NonNull NexmoApiError error){ } void onSuccess(@Nullable NexmoEventsPage result){ Collection
memberEvents = result.getData() } }); ```
Changed
-
NexmoDeliveredEvent
removeInitialEvent
parameter and addInitialEventId
-
NexmoSeenEvent
removeInitialEvent
parameter and addInitialEventId
Fixed
- Support for DTLS in WebRTC
-
NexmoConversationsPage.getPrev()
return the conversations from the right cursor
2.0.0 - 2019-12-22
Added
- Add filter by
EventType
inNexmoConversation.getEvents
NexmoConversation myConversation
//Get all text event for a specifc conversation
myConversation.getEvents(10, NexmoPageOrderDesc, "text", new NexmoRequestListener<NexmoEventsPage> {
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
Collection<NexmoEvent> textEvents = result.getData()
}
});
//Get all member event for a specifc conversation
myConversation.getEvents(10, NexmoPageOrderDesc, "member:*", new NexmoRequestListener<NexmoEventsPage> {
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
Collection<NexmoEvent> memberEvents = result.getData()
}
});
Changed
-
NexmoDeliveredEvent
removeInitialEvent
parameter and addInitialEventId
-
NexmoSeenEvent
removeInitialEvent
parameter and addInitialEventId
Fixed
- Support for DTLS in WebRTC
-
NexmoConversationsPage.getPrev()
return the conversations from the right cursor
1.2.0 - 2019-12-16
Added
- Add filter by
EventType
inNexmoConversation.getEvents
NexmoConversation myConversation
//Get all text event for a specifc conversation
myConversation.getEvents(10, NexmoPageOrderDesc, "text", new NexmoRequestListener<NexmoEventsPage> {
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
Collection<NexmoEvent> textEvents = result.getData()
}
});
//Get all member event for a specifc conversation
myConversation.getEvents(10, NexmoPageOrderDesc, "member:*", new NexmoRequestListener<NexmoEventsPage> {
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
Collection<NexmoEvent> memberEvents = result.getData()
}
});
Fixed
- Support for DTLS in WebRTC
Version 1.1.0 - 2019-12-04
Changes
- Add
iceServerUrls
parameters toNexmoClient.Builder
nexmoClient = new NexmoClient.Builder().iceServerUrls(new String[]{"stun/turn servr url"}).build(context);
Fixed
- fix Push Notification incoming call issue
Version 1.0.3 - 2019-11-20
Changes
- change signature of
NexmoClient.login()
, removeNexmoRequestListener<NexmoUser>
parameter:
nexmoClient = new NexmoClient.Builder().build(context);
nexmoClient.setConnectionListener(new NexmoConnectionListener() {
@Override
public void onConnectionStatusChange(ConnectionStatus connectionStatus, ConnectionStatusReason connectionStatusReason) {
switch (connectionStatus){
case CONNECTED:
//the client is connected to the server - the login successed
case DISCONNECTED:
case CONNECTING:
case UNKNOWN:
//the client is not connected to the server - the login failed/not yet successed
}
});
NexmoClient.login("MY_AUTH_TOKEN")
- change signature of
NexmoPushEventListener.onIncomingCall()
, removeMemberEvent
parameter:
override public void onMessageReceived(@Nullable RemoteMessage message) {
if (NexmoClient.isNexmoPushNotification(message.getData())) {
handleNexmoPushForLoggedInUser(message)
}
}
nexmoClient.processPushNotification(message.getData(), new NexmoPushEventListener(){
public void onIncomingCall(NexmoCall nexmoCall){
}
public void onNewEvent(NexmoEvent event){
}
public void onError(NexmoApiError error){
}
})
Fixed
- fix
NexmoConversation.sendAttachment
bug - fix
NexmoAttachmentEvent
received from backend - fix race condition bug cause drop calls
- fix bug in push notification
Version 1.0.2 - 2019-11-11
Changes
- Rename
GetConversationsPage
toGetConversations
- Rename
GetEventsPage
toGetEvents
-
NexmoClient.GetConversations
defaultpageSize
is 10 -
NexmoConversation.GetEvents
defaultpageSize
is 10
Version 1.0.1
New
- Add
getConversationsPage
inNexmoClient
NexmoClient.get().getConversationsPage(50, NexmoPageOrderDesc, new NexmoRequestListener<NexmoConversationsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoConversationsPage result){
//Get the current page conversations -Sync
Collection<NexmoConversation> conversations = result.getData()
//Get the next page -Async
result.getNext(new NexmoRequestListener<NexmoConversationsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoConversationsPage result){
}
})
//Get the previous page -Async
result.getPrev(new NexmoRequestListener<NexmoConversationsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoConversationsPage result){
}
})
}
});
- Add
getEventsPage
inNexmoConversation
NexmoConversation myConversation;
...
myConversation.getEventsPage(50, NexmoPageOrderDesc, new NexmoRequestListener<NexmoEventsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
//Current event page data -Sync
Collection<NexmoEvent> events = result.getData();
//Get the next page -Async
result.getNext( new NexmoRequestListener<NexmoEventsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
}
}
);
//Get the previous page -Async
result.getPrev( new NexmoRequestListener<NexmoEventsPage>(){
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoEventsPage result){
}
}
);
}
);
Removed
- remove
conversation.getEvents()
Fixed
-
NexmoConversation
Parcelable
fixed
Version 1.0.0 - 2019-09-05
Changed
-
NexmoClient
is a singleton and get only the Context as a mandatory parameter. To initializeNexmoClient
:
NexmoClient nexmoClientInstance = NexmoClientBuilder.Builder().build(context);
- In order to set
NexmoConnectionListener
:
NexmoConnectionListener myConnectionListener = new NexmoConnectionListener{
void onConnectionStatusChange(ConnectionStatus status, ConnectionStatusReason reason){
Log.i("onConnectionStatusChange","status:" + status + " reason:" + reason);
}
}
nexmoClientInstance.setConnectionListener(myConnectionListener);
-
NexmoClient
call function receives a single username or phone number:
//IN APP CALL:
NexmoClient.get().call(callee, NexmoCallHandler.IN_APP, new NexmoRequestListener<NexmoCall>() {
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoCall result){
}
});
//SERVER CALL:
NexmoClient.call(callee, NexmoCallHandler.SERVER, new NexmoRequestListener<NexmoCall>() {
void onError(@NonNull NexmoApiError error){
}
void onSuccess(@Nullable NexmoCall result){
}
});
- Removed
NexmoCallMember.getMember()
, and added getters:
NexmoCallMember someCallMember;
NexmoUser user = someCallMember.getUser();
String memberId = someCallMember.getMemberId();
NexmoCallStatus statues = someCallMember.getStatus();
NexmoChannel channel = someCallMember.getChannel();
New
- Android
minSDK
is now 23. -
CustomEvents
support inNexmoConversation
:
//NexmoCustomEvent:NexmoEvent:
String getCustomType()
HashMap<String, Object> getData()
-
NexmoMedia
added toNexmoConversation
, for audio features support within aNexmoConversation
context:
NexmoMember someMember;
NexmoMedia media = someMember.media;
media.getEnabled();
media.getMuted();
media.getEarmuffed();
-
getNemxoEventType()
inNexmoEvent
is public
Fixed
-
NexmoCallMember.status
reflects the current leg status. - Added guard to
NexmoClient
function to prevent calls while user is not connected. - Updated
NexmoUser
missing values after login.
Removed
- Removed
conversation.getUser()
. The current user can be accessed with:NexmoClient.getUser()
.
Added
-
NexmoConversation
send and receiveCustomEvent
s -
NexmoCustomEvent
:NexmoEvent
:String
getCustomType()
HashMap<String, Object>
getData()
-
NexmoChannel
Object toNexmoMember
.
NexmoMember someMember;
NexmoChannel channel = someMember.channel;
Version 0.3.0 - June 4, 2019
This version contains many small bug fixes and stability improvements. The major changes are:
Added
-
NexmoChannel
was added toNexmoMember
, to exposes the Channel data when exists. TheNexmoChannel
object includesto
andfrom
fields with the data of the Channel destination and origin.
Breaking Changes
Removed
NexmoMember.ChannelType
- should be replaced withNexmoMember.Channel.from.type
NexmoMember.ChannelData
- should be replaced withNexmoMember.Channel.from.data
Changed
NexmoLoginListener
was improved and updated its interface:onLoginStateChange()
andonAvailabilityChange()
were removedonConnectionStatusChange(ConnectionStatus status, ConnectionStatusReason reason)
was added, as an aggregated and improved version of the above methods
Added
- Support for parsing the
MemberId
who initiated a call.
Fixed
Improvements for cross platform in app calls
Crash on processing push notifications without SDK initialization
Crash on sending
markAsDelivered
event
Version 0.3.0 - June 4, 2019
This version contains many small bug fixes and stability improvements. The major changes are:
Added
-
NexmoChannel
was added toNexmoMember
, to exposes the Channel data when exists. TheNexmoChannel
object includesto
andfrom
fields with the data of the Channel destination and origin.
Breaking Changes
Removed
NexmoMember.ChannelType
- should be replaced withNexmoMember.Channel.from.type
NexmoMember.ChannelData
- should be replaced withNexmoMember.Channel.from.data
Changed
NexmoLoginListener
was improved and updated its interface:onLoginStateChange()
andonAvailabilityChange()
were removedonConnectionStatusChange(ConnectionStatus status, ConnectionStatusReason reason)
was added, as an aggregated and improved version of the above methods
Added
- Support for parsing the
MemberId
who initiated a call.
Fixed
Improvements for cross platform in app calls
Crash on processing push notifications without SDK initialization
Crash on sending
markAsDelivered
event
Version 0.2.67 - April 17, 2019
Added
Emulator support
Fixed
- Bugs on updating
CallMember
statuses