Release Notes
4.1.3 - Sept 15, 2022
Fixed
- Fix
NexmoMessageseen and delivered queue processing
4.1.2 - Aug 10, 2022
Fixed
- Use client config logLevel for http logging
4.1.1 - May 25, 2022
Fixed
- Fix
NexmoMessageserialization - Fix error handling within
NexmoClient.getConversation()when not a member.
4.1.0 - May 11, 2022
Added
- Support for
call:transferwithinNexmoCall - Added
NexmoLegTransferEventcontaining details of previous and current conversation when a call is transferred - Added
CallEventListenerto receiveNexmoLegTransferEventwith 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
pushNotificationTTLat theNexmoClient.Builder()level to set registered device Push TTL - New public events
NexmoSubmittedEvent,NexmoRejectedEventandNexmoUndeliverableEventfor messages states. - New Message state listeners added to
NexmoMessageEventListenerinterface.
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 sendNexmoMessageto a conversation.NexmoClient.uploadAttachment(attachment, listener)method to sendNexmoAttachmentType.NexmoMessagerepresents a message ofEMessageEventTypetype to send.EMessageEventTypefor messages of typetext,image,audio,video,file,template,vcard,customandlocation.NexmoChannelTypeadded channels of typesms,mms,whatsapp,viberandmessenger.NexmoAttachmentTypeto upload an attachment message to Vonage Media Service.NexmoMessageEventrepresents 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'srestEnvironmentHostPinningandenvironmentHostPinningmethods 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
ConnectionStatusReasoncaseSSL_PINNING_ERRORwhenDisconnecteddue 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.EMediaConnectionStateenumerate.NexmoMediaStatusListenerto 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
connectionListenersfromHashSettoArraySet.
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.NexmoCallHandlerenumerate.
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
NexmoMemberSummaryreturned byconversation.getMembers(pageSize, order, listener)(paginated), representing a subset member information. - Added
memberEvent.getInvitedBy()that represents the inviter name, if exists. - Added
NexmoEventEmbeddedInfoto all events returned byevent.getEmbeddedInfo()and containing theNexmoUserlinked to the event. - Added
conversation.getMember(memberId, listener)returning the member given its identifier.
Enhancements
- Improve the javadoc documentation.
- Improve
callServersetup 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 withNexmoMemberEventListenerthat provideonMemberInvited,onMemberAdded,onMemberRemovedsubscribing byconversation.addMemberEventListener(). - Renamed
call.getCallMembers()tocall.getAllMembers(). - Renamed
call.getMyCallMember()tocall.getMyMember(). - The
legsendpoint should be included inaclpaths onJWTtoken creation.
"acl": {
"paths": {
...,
"/*/legs/**": {}
}
}
Version 2.8.1 - Dec 14, 2020
Enhancements
- Fixed value inconsistency on attributes
displayNameandimageUrlforNexmoUserobject. - Improved outbound call and conversation stability.
Version 2.8.0 - Nov 19, 2020
Changed
- Renamed
NexmoCallMemberStatus.CANCELEDtoNexmoCallMemberStatus.CANCELLED.
Enhancements
- Notified with
NexmoCallMemberStatus.CANCELLEDon 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_ERRORon connection statusDISCONNECTEDfor 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
NullPointerExceptionwhen processing push notifications during client login.
Version 2.6.1 - April 22, 2020
Added
- Expose the interface
NexmoDTMFEventListenerto subscribe for DTMF events onNexmoConversation.
Version 2.6.0 - April 20, 2020
Added
- Expose connection status
isConnectedinNexmoClient.
NexmoClient.get().isConnected()
Fixed
- Avoid invoking
loginmultiple 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
useFirstIceCandidateparameters toNexmoClient.Builder
nexmoClient = new NexmoClient.Builder().useFirstIceCandidate(true/false).build(context);
Version 2.4.0 - March 3 , 2020
Added
- Add filter by state to
getConversationsPageinNexmoClient.
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
updateAsDeliveredandUpdateAsSeentoNexmoAttachmentEventandNexmoTextEventas helper method to update event locally aftermarkAsSeenormarkAsDeliveredhas 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
markAsSeenandmarkAsDeliveredforNexmoTextEventandNexmoAttachmentEvent
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 toNexmoTextEventandNexmoAttachmentEvent
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 toNexmoTextEventandNexmoAttachmentEvent
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
PermissionRequiredfor 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
clearNexmoEventsListenersmethod inNexmoConversationto 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
clearMemberEventListenersmethod inNexmoConversationto clear allNexmoMemberEventListenerlisteners
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
clearCustomEventListenersmethod inNexmoConversationto clear allNexmoCustomEventListenerlisteners
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
clearLegStatusEventListenersmethod inNexmoConversationto clear allNexmoLegStatusEventListenerlisteners
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
clearDTMFEventListenersmethod inNexmoConversationto clear allNexmoDTMFEventListenerlisteners
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
clearMessageEventListenersmethod inNexmoConversationto clear allNexmoMessageEventListenerlisteners
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
clearNexmoConversationListenersmethod inNexmoConversationto clear allNexmoConversationListenerlisteners
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
clearTypingEventListenersmethod inNexmoConversationto clear allNexmoTypingEventListenerlisteners
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
NexmoMemberparameter toNexmoMemberEventwith respect to theNexmoMemberacted 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
NexmoAttachmentEventwith respect toNexmoConversation
NexmoConversation myConversation;
myConversation.addNexmoMessageEventListener(new NexmoMessageEventListener(){
void onAttachmentEvent(@NonNull final NexmoAttachmentEvent attachmentEvent){
//handle attachment event
}
});
- dispatch
NexmoMediaEventwith respect toNexmoConveration - dispatch
NexmoMediaActionEventwith respect toNexmoConveration - make
NexmoDTMFEventinheritanceNexmoEvent NexmoTextEvent.equalsto usesuper.equalsNexmoConversation.getCreationDateto returnDatejava objectNexmoEvent.getCreationDatefixIllegalArgumentException
2.0.0 - 2019-12-22
Added
- Add filter by
EventTypeinNexmoConversation.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
NexmoDeliveredEventremoveInitialEventparameter and addInitialEventIdNexmoSeenEventremoveInitialEventparameter 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
EventTypeinNexmoConversation.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
NexmoDeliveredEventremoveInitialEventparameter and addInitialEventIdNexmoSeenEventremoveInitialEventparameter 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
EventTypeinNexmoConversation.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
iceServerUrlsparameters 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(), removeMemberEventparameter:
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.sendAttachmentbug - fix
NexmoAttachmentEventreceived from backend - fix race condition bug cause drop calls
- fix bug in push notification
Version 1.0.2 - 2019-11-11
Changes
- Rename
GetConversationsPagetoGetConversations - Rename
GetEventsPagetoGetEvents NexmoClient.GetConversationsdefaultpageSizeis 10NexmoConversation.GetEventsdefaultpageSizeis 10
Version 1.0.1
New
- Add
getConversationsPageinNexmoClient
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
getEventsPageinNexmoConversation
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
NexmoConversationParcelablefixed
Version 1.0.0 - 2019-09-05
Changed
NexmoClientis 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);
NexmoClientcall 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
minSDKis now 23. CustomEventssupport inNexmoConversation:
//NexmoCustomEvent:NexmoEvent:
String getCustomType()
HashMap<String, Object> getData()
NexmoMediaadded toNexmoConversation, for audio features support within aNexmoConversationcontext:
NexmoMember someMember;
NexmoMedia media = someMember.media;
media.getEnabled();
media.getMuted();
media.getEarmuffed();
getNemxoEventType()inNexmoEventis public
Fixed
NexmoCallMember.statusreflects the current leg status.- Added guard to
NexmoClientfunction to prevent calls while user is not connected. - Updated
NexmoUsermissing values after login.
Removed
- Removed
conversation.getUser(). The current user can be accessed with:NexmoClient.getUser().
Added
NexmoConversationsend and receiveCustomEventsNexmoCustomEvent:NexmoEvent:StringgetCustomType()HashMap<String, Object>getData()NexmoChannelObject 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
NexmoChannelwas added toNexmoMember, to exposes the Channel data when exists. TheNexmoChannelobject includestoandfromfields with the data of the Channel destination and origin.
Breaking Changes
Removed
NexmoMember.ChannelType- should be replaced withNexmoMember.Channel.from.typeNexmoMember.ChannelData- should be replaced withNexmoMember.Channel.from.data
Changed
NexmoLoginListenerwas 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
MemberIdwho initiated a call.
Fixed
Improvements for cross platform in app calls
Crash on processing push notifications without SDK initialization
Crash on sending
markAsDeliveredevent
Version 0.3.0 - June 4, 2019
This version contains many small bug fixes and stability improvements. The major changes are:
Added
NexmoChannelwas added toNexmoMember, to exposes the Channel data when exists. TheNexmoChannelobject includestoandfromfields with the data of the Channel destination and origin.
Breaking Changes
Removed
NexmoMember.ChannelType- should be replaced withNexmoMember.Channel.from.typeNexmoMember.ChannelData- should be replaced withNexmoMember.Channel.from.data
Changed
NexmoLoginListenerwas 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
MemberIdwho initiated a call.
Fixed
Improvements for cross platform in app calls
Crash on processing push notifications without SDK initialization
Crash on sending
markAsDeliveredevent
Version 0.2.67 - April 17, 2019
Added
Emulator support
Fixed
- Bugs on updating
CallMemberstatuses