Я работаю над разработкой приложения с сильной настраиваемой серверной частью, в которой каждый вызов API-запроса содержит маркер авторизации Firebase в заголовке.В процессе тестирования мы поняли, что токен всегда получен дважды.
Я использовал ту же логику, которая описана в примере проекта Firebase.Чтобы убедиться, что это не моя ошибка, я проверяю чистый пример проекта, и результат все тот же - как-то OnIdTokenChanged вызывается дважды при входе в систему.Оба обратных вызова содержат правильный токен.Я нахожусь на Unity 2018.3.5f1, .NET 4.5 и Firebase SDK v.5.4.4
Вот пример кода:
public virtual void Start() {
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
InitializeFirebase();
} else {
Debug.LogError(
"Could not resolve all Firebase dependencies: " + dependencyStatus);
}
});
}
protected void InitializeFirebase() {
DebugLog("Setting up Firebase Auth");
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.StateChanged += AuthStateChanged;
auth.IdTokenChanged += IdTokenChanged;
}
void IdTokenChanged(object sender, System.EventArgs eventArgs) {
Firebase.Auth.FirebaseAuth senderAuth = sender as Firebase.Auth.FirebaseAuth;
if (senderAuth == auth && senderAuth.CurrentUser != null && !fetchingToken) {
senderAuth.CurrentUser.TokenAsync(false).ContinueWith(
// THIS CALLED TWICE
task => DebugLog(String.Format("Token = {0}", task.Result)));
}
}
Некоторая важная логика приложения основана на токенеполучить событие, которое должно быть получено только один раз, и совершенно неверно получать 2 токена за 1 вход в систему.
Это ошибка или ожидаемое поведение?Если ошибка, то есть ли такое же поведение на других платформах, таких как родной iOS / Android, или это просто проблема Unity3d?