Unity中的Google Play服务是否在Unity内部存储数据?

问题描述 投票:0回答:1

我需要帮助整合Google Play游戏插件。

我的游戏有一些场景(1 - 菜单,5 - 游戏场景)。我下载了插件和编写代码,初始化玩游戏并签署用户。之后,我使用firebase初始化并使用Play游戏登录。

一切正常,当我开始我的游戏时(我用logcat检查日志,它显示我的登录和消息,登录成功的firebase和玩游戏服务)。我控制firebase和google play服务的脚本包含DontDestroyOnLoad,它会销毁重复项。

当我再次从游戏场景返回菜单时,logcat说这是错误的,无法登录。我可以按退出(按钮)并再次登录,这将是好的。

那么,如果我的PlayServices使用DontDestroyOnLoad走到其他场景,或者它将数据存储在Unity库(SocialPlatform)中,有人可以回答我的问题吗?我不能在游戏场景中提交成就,我不能用这个做其他事情......

谢谢

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using Firebase;
using Firebase.Auth;
using Firebase.Analytics;
using UnityEngine.SocialPlatforms;
using UnityEngine.SceneManagement;
using TMPro;


public class GooglePlayServices : MonoBehaviour
{
    private GPG_CloudSaveSystem cloudSaveSystem = new GPG_CloudSaveSystem();
    private string authCode;
    private bool firebaseInitialized;
    DependencyStatus dependencyStatus = DependencyStatus.UnavailableOther;
    public static GooglePlayServices instance;
    private bool isFirebaseLogged, isPlayGamesLogged;
    FirebaseAuth auth;
    FirebaseUser user;
    private string userNametest, userNameId;

    void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(this.gameObject);
        }
        else
        {
            DestroyImmediate(gameObject);
        }

        auth = FirebaseAuth.DefaultInstance;
        PlayGamesClientConfiguration config = new
            PlayGamesClientConfiguration.Builder()
            .EnableSavedGames()
            .RequestServerAuthCode(false)
            .Build();

        // Enable debugging output (recommended)
        PlayGamesPlatform.DebugLogEnabled = true;

        // Initialize and activate the platform
        PlayGamesPlatform.InitializeInstance(config);
        PlayGamesPlatform.Activate();
        if (!isPlayGamesLogged)
        {
            PlayGamesPlatform.Instance.Authenticate(SignInCallback, false);
        }
    }

    private void Start()
    {
        Debug.Log("User name: " + userNametest + " | User ID: " + userNameId);
    }

    void LoginFirebase()
    {
        if (Social.localUser.authenticated)
        {
            authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
        }
        else
        {
            PlayGamesPlatform.Instance.Authenticate(SignInCallback, false);
            authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
        }

        //FirebaseAuth auth = FirebaseAuth.DefaultInstance;

        FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
        // Set the user's sign up method.
        FirebaseAnalytics.SetUserProperty(
          FirebaseAnalytics.UserPropertySignUpMethod,
          "PlayGames");

        Credential credential = PlayGamesAuthProvider.GetCredential(authCode);
        auth.SignInWithCredentialAsync(credential).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignInWithCredentialAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
                return;
            }

            FirebaseUser newUser = task.Result;
            userNametest = newUser.DisplayName;
            userNameId = newUser.UserId;
            Debug.LogFormat("User signed in successfully: {0} ({1})",
                newUser.DisplayName, newUser.UserId);
            // Set the user ID.
            FirebaseAnalytics.SetUserId(newUser.UserId);
            isFirebaseLogged = true;
        });


        // Set default session duration values.
        FirebaseAnalytics.SetMinimumSessionDuration(new TimeSpan(0, 0, 10));
        FirebaseAnalytics.SetSessionTimeoutDuration(new TimeSpan(0, 30, 0));
        firebaseInitialized = true;
    }

    public void EventLevelFinished(int levelNumber)
    {
        string eventLog = "Level_finished_" + (levelNumber + 1).ToString();
        switch (levelNumber)
        {
            case 2:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
            case 9:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
            case 19:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
            case 29:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
            case 39:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
            case 49:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
            case 59:
                {
                    FirebaseAnalytics.LogEvent(eventLog);
                    break;
                }
        }
    }

    public void EventLogCustomEvent(string log)
    {
        FirebaseAnalytics.LogEvent(log);
    }

    public string GetFirebaseUser()
    {
        return user.DisplayName + " | " + user.UserId;
    }

    public void SaveToCloud()
    {
        JsonToCloud.instance.BuildSaveString();
        cloudSaveSystem.saveString = Prefs.CloudSaveString;
        cloudSaveSystem.SaveToCloud();
    }

    public void LoadFromCloud()
    {
        cloudSaveSystem.LoadFromCloud();
        Prefs.CloudSaveString = cloudSaveSystem.saveString;
        JsonToCloud.instance.StringToData();
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }

    public void ShowSavedGames()
    {
        cloudSaveSystem.showUI();
    }

    public void AnalyticsLogin()
    {
        FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLogin);
    }

    public void AnalyticsProgress()
    {
        FirebaseAnalytics.LogEvent("progress", "percent", 0.4f);
    }

    void InitializeFirebase()
    {
        FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
        // Set the user's sign up method.
        FirebaseAnalytics.SetUserProperty(
          FirebaseAnalytics.UserPropertySignUpMethod,
          "PlayGames");
        // Set the user ID.
        FirebaseAnalytics.SetUserId("uber_user_510");
        // Set default session duration values.
        FirebaseAnalytics.SetMinimumSessionDuration(new TimeSpan(0, 0, 10));
        FirebaseAnalytics.SetSessionTimeoutDuration(new TimeSpan(0, 30, 0));
        firebaseInitialized = true;
    }

    public void ShowAchievements()
    {
        if (PlayGamesPlatform.Instance.localUser.authenticated)
        {
            PlayGamesPlatform.Instance.ShowAchievementsUI();
        }
        else
        {
            Debug.Log("Cannot show Achievements, not logged in");
        }
    }

    public void SignIn()
    {
        if (!PlayGamesPlatform.Instance.localUser.authenticated)
        {
            // Sign in with Play Game Services, showing the consent dialog
            // by setting the second parameter to isSilent=false.
            PlayGamesPlatform.Instance.Authenticate(SignInCallback, false);
        }
        else
        {
            // Sign out of play games
            PlayGamesPlatform.Instance.SignOut();
        }
        AnalyticsLogin();
    }

    public void SignInCallback(bool success)
    {
        if (success)
        {
            isPlayGamesLogged = true;
            Debug.Log("(Lollygagger) Signed in!");
            authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
            ////////////////////////////////
            FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
            {
                dependencyStatus = task.Result;
                if (dependencyStatus == DependencyStatus.Available)
                {
                    if (!isFirebaseLogged)
                    {
                        LoginFirebase();
                    }
                }
                else
                {
                    Debug.LogError(
                      "Could not resolve all Firebase dependencies: " + dependencyStatus);
                }
            });
            /////////////////////////////////////////
        }
        else
        {
            Debug.Log("(Lollygagger) Sign-in failed...");
        }
    }
}
android unity3d google-play google-play-services google-play-games
1个回答
0
投票

github问题的一个人回答我说,没有必要使用DontDestroyOnLoad,只需在主场景使用一次就可以了

© www.soinside.com 2019 - 2024. All rights reserved.