From 64131854abbf4176c4186a0a592057bc679a7260 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 21 Feb 2018 14:58:50 +0100 Subject: [PATCH] Fix firebase. If the token is changed by the system while core is not yet instanciated, it was never saved and lost for ever. --- AndroidManifest.xml | 2 +- src/android/org/linphone/LinphoneManager.java | 8 ++++++++ src/android/org/linphone/LinphonePreferences.java | 11 +++++++---- .../org/linphone/firebase/FirebaseIdService.java | 8 +------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 54804254b..2e0591256 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -293,7 +293,7 @@ - + diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java index 8283ed5ae..bfdf8c9b6 100644 --- a/src/android/org/linphone/LinphoneManager.java +++ b/src/android/org/linphone/LinphoneManager.java @@ -72,6 +72,8 @@ import android.view.View; import android.widget.Button; import android.widget.Toast; +import com.google.firebase.iid.FirebaseInstanceId; + import org.linphone.call.CallActivity; import org.linphone.call.CallIncomingActivity; import org.linphone.activities.LinphoneActivity; @@ -676,6 +678,12 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou } catch (Exception e1) { Log.i("[Push Notification] Assuming GCM jar is not provided."); } + }else if (getString(R.string.push_type).equals("firebase")){ + final String refreshedToken = FirebaseInstanceId.getInstance().getToken(); + if (refreshedToken != null) { + Log.i("[Push Notification] current token is: " + refreshedToken); + LinphonePreferences.instance().setPushNotificationRegistrationID(refreshedToken); + } } } diff --git a/src/android/org/linphone/LinphonePreferences.java b/src/android/org/linphone/LinphonePreferences.java index ba225b41c..d5541003b 100644 --- a/src/android/org/linphone/LinphonePreferences.java +++ b/src/android/org/linphone/LinphonePreferences.java @@ -1143,10 +1143,13 @@ public class LinphonePreferences { if (regId != null && lc.getProxyConfigList().length > 0) { for (ProxyConfig lpc : lc.getProxyConfigList()) { String contactInfos = "app-id=" + appId + ";pn-type=" + getString(R.string.push_type) + ";pn-tok=" + regId + ";pn-silent=1"; - lpc.edit(); - lpc.setContactUriParameters(contactInfos); - lpc.done(); - Log.d("Push notif infos added to proxy config " + lpc.getIdentityAddress().asStringUriOnly()); + String prevContactParams = lpc.getContactParameters(); + if (prevContactParams == null || prevContactParams.compareTo(contactInfos)!=0) { + lpc.edit(); + lpc.setContactUriParameters(contactInfos); + lpc.done(); + Log.d("Push notif infos added to proxy config " + lpc.getIdentityAddress().asStringUriOnly()); + } } lc.refreshRegisters(); } diff --git a/src/android/org/linphone/firebase/FirebaseIdService.java b/src/android/org/linphone/firebase/FirebaseIdService.java index 794ce7608..efff496e3 100644 --- a/src/android/org/linphone/firebase/FirebaseIdService.java +++ b/src/android/org/linphone/firebase/FirebaseIdService.java @@ -30,14 +30,8 @@ public class FirebaseIdService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { // Get updated InstanceID token. - String refreshedToken = FirebaseInstanceId.getInstance().getToken(); + final String refreshedToken = FirebaseInstanceId.getInstance().getToken(); android.util.Log.i("FirebaseIdService", "[Push Notification] Refreshed token: " + refreshedToken); - - sendRegistrationToServer(refreshedToken); - } - - private void sendRegistrationToServer(final String refreshedToken) { - android.util.Log.i("FirebaseIdService", "[Push Notification] Send token to server: " + refreshedToken); LinphoneUtils.dispatchOnUIThread(new Runnable() { @Override public void run() {