No issue: Use correct server host and force subscribe for push
parent
28eb5c541a
commit
2531e9dd62
|
@ -17,6 +17,7 @@ import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import mozilla.components.concept.fetch.Client
|
import mozilla.components.concept.fetch.Client
|
||||||
|
import mozilla.components.concept.push.PushProcessor
|
||||||
import mozilla.components.service.fretboard.Fretboard
|
import mozilla.components.service.fretboard.Fretboard
|
||||||
import mozilla.components.service.fretboard.source.kinto.KintoExperimentSource
|
import mozilla.components.service.fretboard.source.kinto.KintoExperimentSource
|
||||||
import mozilla.components.service.fretboard.storage.flatfile.FlatFileExperimentStorage
|
import mozilla.components.service.fretboard.storage.flatfile.FlatFileExperimentStorage
|
||||||
|
@ -69,6 +70,13 @@ open class FenixApplication : Application() {
|
||||||
if (Settings.getInstance(this).isTelemetryEnabled) {
|
if (Settings.getInstance(this).isTelemetryEnabled) {
|
||||||
components.analytics.metrics.start()
|
components.analytics.metrics.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sets the PushFeature as the singleton instance for push messages to go to.
|
||||||
|
// We need the push feature setup here to deliver messages in the case where the service
|
||||||
|
// starts up the app first.
|
||||||
|
if (FeatureFlags.sendTabEnabled && components.backgroundServices.pushConfig != null) {
|
||||||
|
PushProcessor.install(components.backgroundServices.push)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun registerRxExceptionHandling() {
|
private fun registerRxExceptionHandling() {
|
||||||
|
|
|
@ -6,6 +6,7 @@ package org.mozilla.fenix.components
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.preference.PreferenceManager
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner
|
import androidx.lifecycle.ProcessLifecycleOwner
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -13,7 +14,6 @@ import kotlinx.coroutines.launch
|
||||||
import mozilla.components.browser.storage.sync.PlacesBookmarksStorage
|
import mozilla.components.browser.storage.sync.PlacesBookmarksStorage
|
||||||
import mozilla.components.browser.storage.sync.PlacesHistoryStorage
|
import mozilla.components.browser.storage.sync.PlacesHistoryStorage
|
||||||
import mozilla.components.concept.push.Bus
|
import mozilla.components.concept.push.Bus
|
||||||
import mozilla.components.concept.push.PushProcessor
|
|
||||||
import mozilla.components.concept.sync.AccountObserver
|
import mozilla.components.concept.sync.AccountObserver
|
||||||
import mozilla.components.concept.sync.DeviceCapability
|
import mozilla.components.concept.sync.DeviceCapability
|
||||||
import mozilla.components.concept.sync.DeviceEvent
|
import mozilla.components.concept.sync.DeviceEvent
|
||||||
|
@ -76,7 +76,7 @@ class BackgroundServices(
|
||||||
SyncConfig(setOf("history", "bookmarks"), syncPeriodInMinutes = 240L) // four hours
|
SyncConfig(setOf("history", "bookmarks"), syncPeriodInMinutes = 240L) // four hours
|
||||||
}
|
}
|
||||||
|
|
||||||
private val pushConfig by lazy {
|
val pushConfig by lazy {
|
||||||
val projectIdKey = context.getString(R.string.pref_key_push_project_id)
|
val projectIdKey = context.getString(R.string.pref_key_push_project_id)
|
||||||
val resId = context.resources.getIdentifier(projectIdKey, "string", context.packageName)
|
val resId = context.resources.getIdentifier(projectIdKey, "string", context.packageName)
|
||||||
if (resId == 0) {
|
if (resId == 0) {
|
||||||
|
@ -88,7 +88,7 @@ class BackgroundServices(
|
||||||
|
|
||||||
val pushService by lazy { FirebasePush() }
|
val pushService by lazy { FirebasePush() }
|
||||||
|
|
||||||
private val push by lazy {
|
val push by lazy {
|
||||||
AutoPushFeature(context = context, service = pushService, config = pushConfig!!).also {
|
AutoPushFeature(context = context, service = pushService, config = pushConfig!!).also {
|
||||||
// Notify observers for Services' messages.
|
// Notify observers for Services' messages.
|
||||||
it.registerForPushMessages(PushType.Services, object : Bus.Observer<PushType, String> {
|
it.registerForPushMessages(PushType.Services, object : Bus.Observer<PushType, String> {
|
||||||
|
@ -101,16 +101,31 @@ class BackgroundServices(
|
||||||
// Notify observers for subscription changes.
|
// Notify observers for subscription changes.
|
||||||
it.registerForSubscriptions(object : PushSubscriptionObserver {
|
it.registerForSubscriptions(object : PushSubscriptionObserver {
|
||||||
override fun onSubscriptionAvailable(subscription: AutoPushSubscription) {
|
override fun onSubscriptionAvailable(subscription: AutoPushSubscription) {
|
||||||
accountManager.authenticatedAccount()?.deviceConstellation()
|
// Update for only the services subscription.
|
||||||
?.setDevicePushSubscriptionAsync(
|
if (subscription.type == PushType.Services) {
|
||||||
DevicePushSubscription(
|
accountManager.authenticatedAccount()?.deviceConstellation()
|
||||||
endpoint = subscription.endpoint,
|
?.setDevicePushSubscriptionAsync(
|
||||||
publicKey = subscription.publicKey,
|
DevicePushSubscription(
|
||||||
authKey = subscription.authKey
|
endpoint = subscription.endpoint,
|
||||||
|
publicKey = subscription.publicKey,
|
||||||
|
authKey = subscription.authKey
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
}, ProcessLifecycleOwner.get(), false)
|
}, ProcessLifecycleOwner.get(), false)
|
||||||
|
|
||||||
|
// For all the current Fenix users, we need to remove the current push token and
|
||||||
|
// re-subscribe again on the right push server. We should never do this otherwise!
|
||||||
|
// Should be removed after majority of our users are correctly subscribed.
|
||||||
|
// See: https://github.com/mozilla-mobile/fenix/issues/4218
|
||||||
|
|
||||||
|
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
val prefResetSubKey = "reset_broken_push_subscription"
|
||||||
|
if (preferences.getBoolean(prefResetSubKey, true)) {
|
||||||
|
preferences.edit().putBoolean(prefResetSubKey, false).apply()
|
||||||
|
it.forceRegistrationRenewal()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,11 +133,6 @@ class BackgroundServices(
|
||||||
// Make the "history" and "bookmark" stores accessible to workers spawned by the sync manager.
|
// Make the "history" and "bookmark" stores accessible to workers spawned by the sync manager.
|
||||||
GlobalSyncableStoreProvider.configureStore("history" to historyStorage)
|
GlobalSyncableStoreProvider.configureStore("history" to historyStorage)
|
||||||
GlobalSyncableStoreProvider.configureStore("bookmarks" to bookmarkStorage)
|
GlobalSyncableStoreProvider.configureStore("bookmarks" to bookmarkStorage)
|
||||||
|
|
||||||
// Sets the PushFeature as the singleton instance for push messages to go to.
|
|
||||||
if (FeatureFlags.sendTabEnabled && pushConfig != null) {
|
|
||||||
PushProcessor.install(push)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val deviceEventObserver = object : DeviceEventsObserver {
|
private val deviceEventObserver = object : DeviceEventsObserver {
|
||||||
|
|
Loading…
Reference in New Issue