Stats: считать только холодный запуск; время по Москве
Засчитываем запуск лишь когда процесс создан заново (приложение было выгружено), через флаг SvxApp.coldStart из SplashActivity. Выход из фона и повторный тап по иконке (процесс жив) больше не учитываются. Время последнего запуска пишем по Москве (формат ISO с офсетом +03:00). Убрана зависимость lifecycle-process.
This commit is contained in:
@@ -44,7 +44,6 @@ kotlin {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("ru.rustore.sdk:pushclient:7.4.0")
|
implementation("ru.rustore.sdk:pushclient:7.4.0")
|
||||||
implementation("androidx.lifecycle:lifecycle-process:2.7.0")
|
|
||||||
testImplementation("junit:junit:4.13.2")
|
testImplementation("junit:junit:4.13.2")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ class SplashActivity : Activity() {
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
// Засчитываем запуск только при холодном старте (процесс был выгружен).
|
||||||
|
// Выход из фона или повторный тап по иконке (процесс жив) не считаем.
|
||||||
|
if (SvxApp.coldStart) {
|
||||||
|
SvxApp.coldStart = false
|
||||||
|
StatsReporter.report(this)
|
||||||
|
}
|
||||||
if (mainAlive) {
|
if (mainAlive) {
|
||||||
openMain()
|
openMain()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -63,8 +63,8 @@ object StatsReporter {
|
|||||||
get.disconnect()
|
get.disconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
val now = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US).apply {
|
val now = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US).apply {
|
||||||
timeZone = TimeZone.getTimeZone("UTC")
|
timeZone = TimeZone.getTimeZone("Europe/Moscow")
|
||||||
}.format(Date())
|
}.format(Date())
|
||||||
val launches = (root.optJSONObject(callsign)?.optInt("launches", 0) ?: 0) + 1
|
val launches = (root.optJSONObject(callsign)?.optInt("launches", 0) ?: 0) + 1
|
||||||
root.put(callsign, JSONObject().apply {
|
root.put(callsign, JSONObject().apply {
|
||||||
|
|||||||
@@ -4,9 +4,6 @@ import android.app.Application
|
|||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.lifecycle.DefaultLifecycleObserver
|
|
||||||
import androidx.lifecycle.LifecycleOwner
|
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner
|
|
||||||
import ru.rustore.sdk.pushclient.RuStorePushClient
|
import ru.rustore.sdk.pushclient.RuStorePushClient
|
||||||
import ru.ua1zbe.svxremote.prefs.Prefs
|
import ru.ua1zbe.svxremote.prefs.Prefs
|
||||||
|
|
||||||
@@ -18,22 +15,11 @@ class SvxApp : Application() {
|
|||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
// Процесс только что создан — значит приложение было выгружено и
|
||||||
|
// запускается заново (а не выходит из фона/по иконке).
|
||||||
|
coldStart = true
|
||||||
createPushChannel()
|
createPushChannel()
|
||||||
initRuStorePush()
|
initRuStorePush()
|
||||||
trackLaunches()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Считаем запуском каждый вывод приложения на передний план (холодный старт
|
|
||||||
* и повторное открытие), а не только создание процесса — иначе при живом
|
|
||||||
* процессе в фоне повторные открытия не учитывались бы.
|
|
||||||
*/
|
|
||||||
private fun trackLaunches() {
|
|
||||||
ProcessLifecycleOwner.get().lifecycle.addObserver(object : DefaultLifecycleObserver {
|
|
||||||
override fun onStart(owner: LifecycleOwner) {
|
|
||||||
StatsReporter.report(this@SvxApp)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createPushChannel() {
|
private fun createPushChannel() {
|
||||||
@@ -76,5 +62,9 @@ class SvxApp : Application() {
|
|||||||
private const val TAG = "RuStorePush"
|
private const val TAG = "RuStorePush"
|
||||||
private const val RUSTORE_PROJECT_ID = "Yd7tDjVDHqsnTJwHNYN08cYIvy8fsWU-"
|
private const val RUSTORE_PROJECT_ID = "Yd7tDjVDHqsnTJwHNYN08cYIvy8fsWU-"
|
||||||
private const val PUSH_TOPIC = "svxhomyak"
|
private const val PUSH_TOPIC = "svxhomyak"
|
||||||
|
|
||||||
|
/** true, если процесс создан заново (приложение было выгружено). */
|
||||||
|
@Volatile
|
||||||
|
var coldStart = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user