firebase / quickstart-unity

Firebase Quickstart Samples for Unity
https://firebase.google.com/games
Apache License 2.0
833 stars 429 forks source link

Error AndroidRuntime Caused by: java.lang.IllegalArgumentException: Timestamp seconds out of range: 6904677473486788500 #891

Closed adunStudio closed 3 years ago

adunStudio commented 3 years ago

[REQUIRED] Please fill in the following fields:

[REQUIRED] Please describe the issue here:

When run the app from nox player, the app will be shut down with the stack trace below. nox player version: 6.6.1.0

12-11 02:06:27.397 5603 5603 Debug AndroidRuntime Shutting down VM
01-01 00:00:00.000 -1 -1 Info  --------- beginning of crash
12-11 02:06:27.397 5603 5603 Error AndroidRuntime FATAL EXCEPTION: main
12-11 02:06:27.397 5603 5603 Error AndroidRuntime Process: com.mongilmongilgames.pigscastle, PID: 5603
12-11 02:06:27.397 5603 5603 Error AndroidRuntime java.lang.Error: FATAL EXCEPTION [main]
12-11 02:06:27.397 5603 5603 Error AndroidRuntime Unity version     : 2019.4.9f1
12-11 02:06:27.397 5603 5603 Error AndroidRuntime Device model      : samsung SM-N950N
12-11 02:06:27.397 5603 5603 Error AndroidRuntime Device fingerprint: samsung/dream2ltexx/dream2lte:5.1.1/NMF26X/500200604:user/release-keys
12-11 02:06:27.397 5603 5603 Error AndroidRuntime 
12-11 02:06:27.397 5603 5603 Error AndroidRuntime Caused by: java.lang.RuntimeException: Internal error in Cloud Firestore (22.0.0).
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.util.AsyncQueue.lambda$panic$3(AsyncQueue.java:534)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.util.AsyncQueue$$Lambda$3.run(AsyncQueue.java)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at android.os.Handler.handleCallback(Handler.java:739)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at android.os.Handler.dispatchMessage(Handler.java:95)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at android.os.Looper.loop(Looper.java:135)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at android.app.ActivityThread.main(ActivityThread.java:5305)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.lang.reflect.Method.invoke(Native Method)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.lang.reflect.Method.invoke(Method.java:372)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime Caused by: java.lang.IllegalArgumentException: Timestamp seconds out of range: 6904675270168565139
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.util.Preconditions.checkArgument(Preconditions.java:117)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.Timestamp.validateRange(Timestamp.java:159)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.Timestamp.<init>(Timestamp.java:63)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeTimestamp(RemoteSerializer.java:113)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeVersion(RemoteSerializer.java:124)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeWatchChange(RemoteSerializer.java:890)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:106)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:38)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(AbstractStream.java:119)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(AbstractStream.java)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$CloseGuardedRunner.run(AbstractStream.java:67)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(AbstractStream.java:110)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(FirestoreChannel.java:125)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(AsyncQueue.java:229)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at java.lang.Thread.run(Thread.java:818)
12-11 02:06:27.398 1803 2155 Warn ActivityManager   Force finishing activity 1 com.mongilmongilgames.pigscastle/com.unity3d.player.UnityPlayerActivity
12-11 02:06:27.400 1502 1502 Error EGL_emulation tid 1502: eglCreateSyncKHR(1482): error 0x3004 (EGL_BAD_ATTRIBUTE)
12-11 02:06:27.406 1803 1823 Warn WindowManager updateFocusedWindowLocked, focusedAppToken is null.
12-11 02:06:27.423 1502 1502 Error EGL_emulation tid 1502: eglCreateSyncKHR(1482): error 0x3004 (EGL_BAD_ATTRIBUTE)

Steps to reproduce:

If run an app on NoxPlay, the app is forced to shut down 100%.

Relevant Code:

MemberInfo.cs

using Firebase.Firestore;

public enum MemberState
{
    Normal,
    Ban
}

[FirestoreData]
public class MemberInfo
{
    [FirestoreProperty, ServerTimestamp] public Timestamp LastUpdated { get; set; } = Timestamp.GetCurrentTimestamp();

    [FirestoreProperty] public string Nickname { get; set; } = "Test";

    [FirestoreProperty] public int Profile { get; set; } = 0;

    [FirestoreProperty] public MemberState MemberState { get; set; } = MemberState.Normal;

    [FirestoreProperty] public string Message { get; set; } = string.Empty;

    [FirestoreProperty] public int Level { get; set; } = 1;

    public MemberInfo()
    {

    }
}

MemberManager.cs

using Firebase.Extensions;
using UnityEngine;
using Firebase.Firestore;

public class MemberManager : SingletonBehaviour<MemberManager>, ISaveLoad
{
    private CollectionReference m_CollectionReference;
    private DocumentReference m_DocumentReference;

    private MemberInfo m_MyMemberInfo;
    public MemberInfo MyMemberInfo => m_MyMemberInfo;

    public void Load()
    {
        Debug.Log("[Load] Member");
        m_CollectionReference = ServerManager.Instance.Firestore.Collection("Member");
        m_DocumentReference = m_CollectionReference.Document(ServerManager.Instance.UserId);

        m_DocumentReference.GetSnapshotAsync().ContinueWithOnMainThread(task =>
        {
            if (task.IsCanceled || task.IsFaulted)
            {
                Debug.LogError("[Firebase] LoadMemberInfo False: "+ task.Exception);
                return;
            }

            DocumentSnapshot snapshot = task.Result;

            if (snapshot.Exists)
            {
                m_MyMemberInfo = snapshot.ConvertTo<MemberInfo>();
            }
            else
            {
                m_MyMemberInfo = new MemberInfo();
                Save();
            }
        });
    }

    public void Save()
    {
        Debug.Log("[Save] Member");
        m_DocumentReference.SetAsync(m_MyMemberInfo, SetOptions.MergeAll);
    }
}

ServerManager.cs

public class ServerManager : SingletonBehaviour<ServerManager>
{
    private FirebaseAuth m_FirebaseAuth;
    private FirebaseUser m_FirebaseUser;
    private FirebaseFirestore m_Firestore;
    public FirebaseFirestore Firestore => m_Firestore;
    public string UserId => m_FirebaseUser.UserId;

    public void Start()
    {
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
            var dependencyStatus = task.Result;

            if (dependencyStatus != Firebase.DependencyStatus.Available) {
                UnityEngine.Debug.LogError(System.String.Format(
                    "[Firebase] Could not resolve all Firebase dependencies: {0}", dependencyStatus));
            }
            else
            {
                m_FirebaseAuth = FirebaseAuth.DefaultInstance;

                GPGSLogin();
            }
        });
    }

    public void GPGSLogin()
    {
        StartCoroutine(Login_Coroutine());
    }

    private IEnumerator Login_Coroutine()
    {
        yield return new WaitForSeconds(1f);

        GameServices.ManagedInit();
    }

    void OnEnable()
    {
        GameServices.UserLoginSucceeded += OnUserLoginSucceeded;
        GameServices.UserLoginFailed += OnUserLoginFailed;
    }

    void OnDisable()
    {
        GameServices.UserLoginSucceeded -= OnUserLoginSucceeded;
        GameServices.UserLoginFailed -= OnUserLoginFailed;
    }

    void OnUserLoginSucceeded()
    {
        Debug.LogWarning("[GPGS] User logged in successfully.");

        var authCode = GameServices.GetServerAuthCode();
        Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);

        m_FirebaseAuth.SignInWithCredentialAsync(credential).ContinueWithOnMainThread(task =>
        {
            if (task.IsCanceled) 
            {
                Debug.LogError("[Firebase] SignInWithCredentialAsync(GooglePlay) was canceled.");
                return;
            }
            if (task.IsFaulted) 
            {
                Debug.LogError("[Firebase] SignInWithCredentialAsync(GooglePlay) encountered an error: " + task.Exception);
                return;
            }

            m_FirebaseUser = task.Result;

            Debug.LogWarning($"[Firebase] User signed(GooglePlay) in successfully: {m_FirebaseUser.UserId}");
            Debug.LogWarning($"[Firebase] DisplayName: {m_FirebaseUser.DisplayName}");

            LoadInfo();
        });
    }

    void OnUserLoginFailed()
    {
        Debug.LogError("[GPGS] User login failed.");
    }

    private void LoadInfo()
    {
        m_Firestore = FirebaseFirestore.DefaultInstance;

        Debug.Log("[Firestore] Load Start");

        MemberManager.Instance.Load();
        HeroManager.Instance.Load();
        CurrencyManager.Instance.Load();
    }
}

image

The same thing happens even if I erase memberInfo.cs's LastUpdated property and documents's same field

adunStudio commented 3 years ago

It works well with Samsung Galaxy Note 3, not nox player

wilhuff commented 3 years ago

The critical part of the stack is this one:

12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeTimestamp(RemoteSerializer.java:113)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeVersion(RemoteSerializer.java:124)
12-11 02:06:27.397 5603 5603 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeWatchChange(RemoteSerializer.java:890)

This is decoding the read time of the change, not any part of the document itself. The Firestore server does not send invalid timestamps--or at least if it did, this would be a widely reported problem. Something is corrupting the data we're reading from the server. Given that we're reusing our Android SDK under the covers here which hasn't been subject to these kinds of issues, I suspect this is an issue with the Nox player itself.

Could you enable logging and post what you see? Set FirebaseFirestore.LogLevel = LogLevel.Debug after creating the FirebaseFirestore instance. The logs should be visible with logcat.

adunStudio commented 3 years ago
private void LoadInfo()
    {
        m_Firestore = FirebaseFirestore.DefaultInstance;

        FirebaseFirestore.LogLevel = LogLevel.Debug;

        Debug.Log("[Firestore] Load Start");

        MemberManager.Instance.Load();
        HeroManager.Instance.Load();
        CurrencyManager.Instance.Load();
    }
12-11 04:12:07.182 9310 9310 Error AndroidRuntime FATAL EXCEPTION: main
12-11 04:12:07.182 9310 9310 Error AndroidRuntime Process: com.mongilmongilgames.pigscastle, PID: 9310
12-11 04:12:07.182 9310 9310 Error AndroidRuntime java.lang.Error: FATAL EXCEPTION [main]
12-11 04:12:07.182 9310 9310 Error AndroidRuntime Unity version     : 2019.4.9f1
12-11 04:12:07.182 9310 9310 Error AndroidRuntime Device model      : samsung SM-N950N
12-11 04:12:07.182 9310 9310 Error AndroidRuntime Device fingerprint: samsung/dream2ltexx/dream2lte:5.1.1/NMF26X/500200604:user/release-keys
12-11 04:12:07.182 9310 9310 Error AndroidRuntime 
12-11 04:12:07.182 9310 9310 Error AndroidRuntime Caused by: java.lang.RuntimeException: Internal error in Cloud Firestore (22.0.0).
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.util.AsyncQueue.lambda$panic$3(AsyncQueue.java:534)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.util.AsyncQueue$$Lambda$3.run(AsyncQueue.java)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at android.os.Handler.handleCallback(Handler.java:739)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at android.os.Handler.dispatchMessage(Handler.java:95)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at android.os.Looper.loop(Looper.java:135)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at android.app.ActivityThread.main(ActivityThread.java:5305)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.lang.reflect.Method.invoke(Native Method)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.lang.reflect.Method.invoke(Method.java:372)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime Caused by: java.lang.IllegalArgumentException: Timestamp seconds out of range: 6904694146549835454
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.util.Preconditions.checkArgument(Preconditions.java:117)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.Timestamp.validateRange(Timestamp.java:159)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.Timestamp.<init>(Timestamp.java:63)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeTimestamp(RemoteSerializer.java:113)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeVersion(RemoteSerializer.java:124)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.RemoteSerializer.decodeWatchChange(RemoteSerializer.java:878)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:106)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.WatchStream.onNext(WatchStream.java:38)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.lambda$onNext$1(AbstractStream.java:119)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$StreamObserver$$Lambda$2.run(AbstractStream.java)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$CloseGuardedRunner.run(AbstractStream.java:67)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.AbstractStream$StreamObserver.onNext(AbstractStream.java:110)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.remote.FirestoreChannel$1.onMessage(FirestoreChannel.java:125)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(AsyncQueue.java:229)
12-11 04:12:07.182 9310 9310 Error AndroidRuntime   at java.lang.Thread.run(Thread.java:818)
12-11 04:12:07.182 1803 2147 Warn ActivityManager   Force finishing activity 1 com.mongilmongilgames.pigscastle/com.unity3d.player.UnityPlayerActivity
12-11 04:12:07.185 1502 1502 Error EGL_emulation tid 1502: eglCreateSyncKHR(1482): error 0x3004 (EGL_BAD_ATTRIBUTE)
12-11 04:12:07.192 1803 1823 Warn WindowManager updateFocusedWindowLocked, focusedAppToken is null.
12-11 04:12:07.213 1502 1502 Error EGL_emulation tid 1502: eglCreateSyncKHR(1482): error 0x3004 (EGL_BAD_ATTRIBUTE)

@wilhuff here!

but I couldn't find a difference....

wilhuff commented 3 years ago

The log output should look like this: https://github.com/firebase/firebase-android-sdk/issues/1790#issuecomment-673049112

You should be able to see the keyword WatchStream in the output. Perhaps it's further back in the log?

google-oss-bot commented 3 years ago

Hey @adunStudio. We need more information to resolve this issue but there hasn't been an update in 5 weekdays. I'm marking the issue as stale and if there are no new updates in the next 5 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!

google-oss-bot commented 3 years ago

Since there haven't been any recent updates here, I am going to close this issue.

@adunStudio if you're still experiencing this problem and want to continue the discussion just leave a comment here and we are happy to re-open this.