From 01d9360237cf16bb3531eb86a64cf2ceccfbd307 Mon Sep 17 00:00:00 2001 From: "sergey.kukurudzyak" Date: Fri, 18 May 2018 17:53:56 +0300 Subject: [PATCH] fixed BKNDLSS-17002 Anroid 8 (Oreo) devices not working with real time library --- src/com/backendless/Backendless.java | 5 ++++ src/com/backendless/Messaging.java | 42 ++++++++++++++++++---------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/com/backendless/Backendless.java b/src/com/backendless/Backendless.java index 442e97497..c9387eee0 100644 --- a/src/com/backendless/Backendless.java +++ b/src/com/backendless/Backendless.java @@ -172,6 +172,11 @@ public static void initApp( Object context, final String applicationId, final St Context appContext = ( (Context) context ).getApplicationContext(); UserTokenStorageFactory.instance().init( appContext ); UserIdStorageFactory.instance().init( appContext ); + com.backendless.Messaging.DeviceIdHolder.init( appContext ); + } + else + { + com.backendless.Messaging.DeviceIdHolder.init( ); } if( isCodeRunner() ) diff --git a/src/com/backendless/Messaging.java b/src/com/backendless/Messaging.java index 3153fa731..17003b8b0 100644 --- a/src/com/backendless/Messaging.java +++ b/src/com/backendless/Messaging.java @@ -37,6 +37,7 @@ import android.content.Context; import android.os.AsyncTask; import android.os.Build; +import android.provider.Settings; import com.backendless.async.callback.AsyncCallback; import com.backendless.exceptions.BackendlessException; import com.backendless.exceptions.BackendlessFault; @@ -61,7 +62,6 @@ public final class Messaging { - public static String DEVICE_ID; private final static String MESSAGING_MANAGER_SERVER_ALIAS = "com.backendless.services.messaging.MessagingService"; private final static String DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS = "com.backendless.services.messaging.DeviceRegistrationService"; private final static String EMAIL_MANAGER_SERVER_ALIAS = "com.backendless.services.mail.CustomersEmailService"; @@ -80,13 +80,8 @@ private Messaging() static { - String id = null; if( Backendless.isAndroid() ) { - if( android.os.Build.VERSION.SDK_INT < 26 ) - id = Build.SERIAL; - else - id = Build.getSerial(); OS_VERSION = String.valueOf( Build.VERSION.SDK_INT ); OS = "ANDROID"; } @@ -95,8 +90,22 @@ private Messaging() OS_VERSION = System.getProperty( "os.version" ); OS = System.getProperty( "os.name" ); } + } + + static class DeviceIdHolder + { + static String id; - if( id == null || id.equals( "" ) ) + static void init( Context context ) + { + if( android.os.Build.VERSION.SDK_INT < 27 ) + id = Build.SERIAL; + else + id = Settings.Secure.getString( context.getContentResolver(), Settings.Secure.ANDROID_ID ); + } + + static void init() + { try { id = UUID.randomUUID().toString(); @@ -111,10 +120,15 @@ private Messaging() builder.append( System.getProperty( "java.home" ) ); id = UUID.nameUUIDFromBytes( builder.toString().getBytes() ).toString(); } + } + } - DEVICE_ID = id; + public static String getDeviceId() + { + return DeviceIdHolder.id; } + static Messaging getInstance() { return instance; @@ -214,7 +228,7 @@ public String registerDeviceOnServer( String deviceToken, final List cha throw new IllegalArgumentException( ExceptionMessage.NULL_DEVICE_TOKEN ); DeviceRegistration deviceRegistration = new DeviceRegistration(); - deviceRegistration.setDeviceId( DEVICE_ID ); + deviceRegistration.setDeviceId( getDeviceId() ); deviceRegistration.setOs( OS ); deviceRegistration.setOsVersion( OS_VERSION ); deviceRegistration.setDeviceToken( deviceToken ); @@ -234,7 +248,7 @@ public void registerDeviceOnServer( String deviceToken, final List chann throw new IllegalArgumentException( ExceptionMessage.NULL_DEVICE_TOKEN ); DeviceRegistration deviceRegistration = new DeviceRegistration(); - deviceRegistration.setDeviceId( DEVICE_ID ); + deviceRegistration.setDeviceId( getDeviceId() ); deviceRegistration.setOs( OS ); deviceRegistration.setOsVersion( OS_VERSION ); deviceRegistration.setDeviceToken( deviceToken ); @@ -315,12 +329,12 @@ protected void onPostExecute( RuntimeException result ) public boolean unregisterDeviceOnServer() throws BackendlessException { - return (Boolean) Invoker.invokeSync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "unregisterDevice", new Object[] { DEVICE_ID } ); + return (Boolean) Invoker.invokeSync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "unregisterDevice", new Object[] { getDeviceId() } ); } public void unregisterDeviceOnServer( final AsyncCallback responder ) { - Invoker.invokeAsync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "unregisterDevice", new Object[] { DEVICE_ID }, responder ); + Invoker.invokeAsync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "unregisterDevice", new Object[] { getDeviceId() }, responder ); } public DeviceRegistration getDeviceRegistration() throws BackendlessException @@ -330,7 +344,7 @@ public DeviceRegistration getDeviceRegistration() throws BackendlessException public DeviceRegistration getRegistrations() throws BackendlessException { - return (DeviceRegistration) Invoker.invokeSync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "getDeviceRegistrationByDeviceId", new Object[] { DEVICE_ID } ); + return (DeviceRegistration) Invoker.invokeSync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "getDeviceRegistrationByDeviceId", new Object[] { getDeviceId() } ); } public void getDeviceRegistration( AsyncCallback responder ) @@ -340,7 +354,7 @@ public void getDeviceRegistration( AsyncCallback responder ) public void getRegistrations( AsyncCallback responder ) { - Invoker.invokeAsync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "getDeviceRegistrationByDeviceId", new Object[] { DEVICE_ID }, responder ); + Invoker.invokeAsync( DEVICE_REGISTRATION_MANAGER_SERVER_ALIAS, "getDeviceRegistrationByDeviceId", new Object[] { getDeviceId() }, responder ); } /**