fix(android): brancher les classements sur les vrais IDs Play Jeux
La console Play génère les IDs de leaderboard (format CgkI…), contrairement à l'hypothèse de la spec : l'app demandait des boards questions_N inexistants, d'où un chargement infini et des scores silencieusement perdus. Remplacer le mapping par la table des vrais IDs (GameConfig.leaderboardId() devient nullable, null = pas de board) et logguer les échecs GMS jusqu'ici avalés par runCatching. Spec corrigée en conséquence (§6, §7).
This commit is contained in:
5 files changed
+60
-14
No files matched your search
@@ -74,7 +74,7 @@ fun App(
|
||||
scope.launch {
|
||||
if (gamesServices.isSignedIn() || gamesServices.signIn()) {
|
||||
if (playerName == null) playerName = gamesServices.playerDisplayName()
|
||||
gamesServices.showLeaderboard(config.leaderboardId())
|
||||
config.leaderboardId()?.let { gamesServices.showLeaderboard(it) }
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -91,7 +91,9 @@ fun App(
|
||||
withContext(NonCancellable) {
|
||||
val score = result.leaderboardScore()
|
||||
if (score > 0 && (gamesServices.isSignedIn() || gamesServices.signIn())) {
|
||||
gamesServices.submitScore(result.config.leaderboardId(), score)
|
||||
result.config.leaderboardId()?.let {
|
||||
gamesServices.submitScore(it, score)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,17 @@ package com.livrets.games
|
||||
|
||||
import com.livrets.game.GameConfig
|
||||
|
||||
fun GameConfig.leaderboardId(): String = "questions_$questionCount"
|
||||
private val leaderboardIds = mapOf(
|
||||
5 to "CgkIuqy3oN8HEAIQAg",
|
||||
10 to "CgkIuqy3oN8HEAIQAw",
|
||||
15 to "CgkIuqy3oN8HEAIQBA",
|
||||
20 to "CgkIuqy3oN8HEAIQBQ",
|
||||
25 to "CgkIuqy3oN8HEAIQBg",
|
||||
30 to "CgkIuqy3oN8HEAIQBw",
|
||||
35 to "CgkIuqy3oN8HEAIQCA",
|
||||
40 to "CgkIuqy3oN8HEAIQCQ",
|
||||
45 to "CgkIuqy3oN8HEAIQCg",
|
||||
50 to "CgkIuqy3oN8HEAIQCw",
|
||||
)
|
||||
|
||||
fun GameConfig.leaderboardId(): String? = leaderboardIds[questionCount]
|
||||
@@ -7,6 +7,7 @@ import com.livrets.game.Question
|
||||
import com.livrets.game.product
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.time.Instant
|
||||
|
||||
class LeaderboardScoreTest {
|
||||
@@ -84,7 +85,26 @@ class LeaderboardScoreTest {
|
||||
|
||||
@Test
|
||||
fun `id de board par nombre de questions`() {
|
||||
assertEquals("questions_10", GameConfig(10, 5, 12).leaderboardId())
|
||||
assertEquals("questions_5", GameConfig(5, 3, 1).leaderboardId())
|
||||
val attendu = mapOf(
|
||||
5 to "CgkIuqy3oN8HEAIQAg",
|
||||
10 to "CgkIuqy3oN8HEAIQAw",
|
||||
15 to "CgkIuqy3oN8HEAIQBA",
|
||||
20 to "CgkIuqy3oN8HEAIQBQ",
|
||||
25 to "CgkIuqy3oN8HEAIQBg",
|
||||
30 to "CgkIuqy3oN8HEAIQBw",
|
||||
35 to "CgkIuqy3oN8HEAIQCA",
|
||||
40 to "CgkIuqy3oN8HEAIQCQ",
|
||||
45 to "CgkIuqy3oN8HEAIQCg",
|
||||
50 to "CgkIuqy3oN8HEAIQCw",
|
||||
)
|
||||
attendu.forEach { (questions, id) ->
|
||||
assertEquals(id, GameConfig(questions, 5, 12).leaderboardId())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `pas d'id de board hors liste des nombres de questions`() {
|
||||
assertNull(GameConfig(7, 5, 12).leaderboardId())
|
||||
assertNull(GameConfig(60, 5, 12).leaderboardId())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user