Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 尝试通过Play Games登录时Unity应用程序崩溃_Firebase_Unity3d_Google Play Games - Fatal编程技术网

Firebase 尝试通过Play Games登录时Unity应用程序崩溃

Firebase 尝试通过Play Games登录时Unity应用程序崩溃,firebase,unity3d,google-play-games,Firebase,Unity3d,Google Play Games,我有一个问题,这几天一直在困扰着我 我做了所有必要的配置,为我的Android Unity游戏设置了Google Play Games登录方法 然而,每次我点击“登录”按钮时,“玩游戏”图标就会在顶部短暂出现,应用程序会突然崩溃 分析logcat时,以下脚本突出显示的行(InitializePlayGamesPlatform()方法的最后一行)上似乎有错误: 使用谷歌游戏; 使用GooglePlayGames.BasicApi; 使用UnityEngine; 公共类UserManager:Mo

我有一个问题,这几天一直在困扰着我

我做了所有必要的配置,为我的Android Unity游戏设置了Google Play Games登录方法

然而,每次我点击“登录”按钮时,“玩游戏”图标就会在顶部短暂出现,应用程序会突然崩溃

分析logcat时,以下脚本突出显示的行(InitializePlayGamesPlatform()方法的最后一行)上似乎有错误

使用谷歌游戏;
使用GooglePlayGames.BasicApi;
使用UnityEngine;
公共类UserManager:MonoBehavior
{
私有Firebase.Auth.FirebaseAuth FirebaseAuth;
私有Firebase.Auth.FirebaseUser FirebaseUser;
void Start()
{
初始化PlayGamesplatform();
}
私有void InitializePlayGamesPlatform()
{
PlayGamesClientConfiguration配置=新建PlayGamesClientConfiguration.Builder()
.RequestServerAuthCode(错误)
.Build();
PlayGamesPlatform.InitializeInstance(配置);
PlayGamesPlatform.Activate();
************firebaseAuth=Firebase.Auth.firebaseAuth.DefaultInstance************
}
公共无效TrySignIn()
{
UnityEngine.Social.localUser.Authenticate((bool成功)=>
{
如果(!成功)
{
LogError(“UserManager:登录到游戏中失败!”);
返回;
}
字符串authCode=PlayGamesPlatform.Instance.GetServerAuthCode();
if(string.IsNullOrEmpty(authCode))
{
LogError(“UserManager:获取身份验证代码失败!”);
返回;
}
LogFormat(“UserManager:auth代码为:{0}”,authCode);
Firebase.Auth.Credential Credential=Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
firebaseAuth.SignInWithCredentialAsync(凭据)。ContinueWith(任务=>
{
如果(task.IsCanceled)
{
LogError(“UserManager:登录已取消!”);
返回;
}
if(task.IsFaulted)
{
LogError(“UserManager:登录时出错!”);
返回;
}
firebaseUser=task.Result;
LogFormat(“UserManager:user成功登录:{0}({1})”,firebaseUser.DisplayName,firebaseUser.UserId);
});
});
}
公共无效TrySignOut()
{
firebaseAuth.SignOut();
}

}
该特定问题与google-services.json文件有关,如果该文件存在于您的资产/目录中,则该文件应自动包含在您的构建中。请注意,该过程与Android过程有很大的不同,因此您可能需要忽略Firebase Android说明,只需遵循以下步骤即可

我先解决最简单的问题。确保您的
Assets/
目录中有您的
googleservices.json
文件。我通常将我的文件保存在
资产/Data/
中(这也是我保存ScriptableObjects之类的东西的地方)。如果您没有,请按照以下页面上的说明操作:

获取Android应用程序的配置文件转到设置图标 Firebase控制台中的项目设置。在你的应用程序卡中, 选择需要配置文件的应用程序的程序包名称。 单击google-services.json。将配置文件移到模块中 (应用程序级别)应用程序的目录。确保你只有这个 应用程序中最近下载的配置文件

获得该文件后,您需要确保正确生成
Assets/Plugins/Android/Firebase/res/values/google services.xml

之所以存在这种情况,是因为Unity SDK没有使用,这样做会破坏与Unity的旧版本或选择退出gradle集成的团队的兼容性。这就是为什么我强烈建议不要遵循这些原则,除非你愿意手工做很多工作

如果您没有
google services.xml
或想要尝试重新生成它,您应该导航到资产>外部依赖关系管理器>Android解析器>强制解析:

如果这确实解决了您的问题,那么您应该确保启用自动解决以避免将来出现此问题:

还有一些更微妙的问题突然出现。一个是“Unity的外部依赖管理器”是“Play Services解析器”的更名(开发人员一直认为它与Play Services有关,但事实并非如此)。因此,请检查您是否没有
Assets/Play Services解析器
目录。此外,如果您在Unity软件包管理器中使用外部依赖关系管理器,请确保
资产/External Dependency Manager
也不存在。由于您使用的是EDM4U附带的两个插件,因此可能会有一些重复(尽管EDM4U应该足够聪明来解决这个问题)

如果您仍然遇到问题,那么在外部依赖关系管理器、google-services.json、google-services.xml以及Firebase和Play Games登录插件处于活动状态时,共享目录布局WRT可能会有所帮助。另外,如果
googleservices.xml
将其导入导出的项目(或您的APK),则值得注意。如果您不想在Stack Overflow上分享这些内容,请随时联系并链接此问题

--Patrick

一名Firebase支持成员(@Jesus)刚刚帮助我解决了这个问题。解决方法是直接将sourceset添加到mainTemplate.gradle

我必须做到以下几点:

  • 转到项目设置发布设置构建>chec
    lintOptions {
        abortOnError false
    }
    
    sourceSets { main { res.srcDirs += 'C:\\Users\\USERNAME\\Documents\\Unity Projects\\GAMENAME\\Assets\\Plugins\\Android\\Firebase\\res\\values\\google-services.xml' } }
    
    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb', 'google-services.json']
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }