我正在尝试使用 firebase 在我的应用程序中添加“使用 google 登录”选项。但是,当我单击在 Android 设备上调用登录脚本的按钮时,应用程序崩溃并完全关闭。
我无法在编辑器中运行此脚本。那么还有其他方法可以找出错误是什么吗?
我正在使用此处找到的脚本https://www.dropbox.com/s/qss2wk4v52d48j4/GoogleSignInDemo.cs?dl=0 并从我的 firebase 项目中获取了 Web 客户端 ID,并启用了 google 登录。
我还将 sha1 指纹添加到我的 firebase 项目中,并将 google-services.json 文件复制到我的 unity 项目中。 我使用的是Unity 2020.1.6f1 我的 firebase 软件包版本为 7.0.1 和谷歌登录插件 1.0.4
非常感谢有关解决此问题并使用 google 选项登录的所有帮助。
我发现我的代码在这里中断:
GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnAuthenticationFinished);
这是 OnAuthenticationFinished 方法:
internal void OnAuthenticationFinished(Task<GoogleSignInUser> task){}
我将其留空以确保问题不在方法内部
我是 C# 和 Unity 初学者。 我相信 OnAuthenticationFinished 在后台线程中运行(与 Unity 主线程的区别)。 如果您在 OnAuthenticationFinished() 中更新 UI 或打印日志会导致崩溃。
我通过将 OnAuthenticationFinished() 中的值保存到变量来解决这个问题。并在 Update() 中使用它们
private string idToken;
private bool errorMessage;
void OnAuthenticationFinished(Task<GoogleSignInUser> task)
{
if (task.IsFaulted) {
err = true;
return;
}
idToken = task.Result.IdToken;
}
private void Update()
{
if (!String.IsNullOrEmpty(idToken))
{
// Handle login successfully
idToken = null;
return;
}
if (err)
{
// Show err
err = false;
}
}
️或者你可以像 Digvijaysinh Gohil 一样使用 Corrountine() 。
我认为我看到你的问题了。
OnAuthenticationFinished
可能会在后台触发,并且 AddToInformation
正在改变 UnityEngine
中的某些内容(即更新 infoText.text
)。
如果将
ContinueWith
替换为 ContinueWithOnMainThread
,它可能会起作用。我建议现在对代码中所有 ContinueWith
实例执行此操作。它的效率可能稍低(您正在游戏线程上工作),但在 Unity 中也更安全。否则我需要查看日志才能找出问题所在。请参阅此博文了解更多信息。
面临着同样的问题,
ContinueWithOnMain
也不适合我,所以我基本上定义了协程,并让它们在执行其他指令之前等待帧结束
这是我做的代码
FirebaseAuthHandler.instance.GetAuth().SignInWithCredentialAsync(credential).ContinueWith(authTask =>
{
if (authTask.IsCanceled)
{
signInCompleted.SetCanceled();
Debug.Log("Task canceled");
}
else if (authTask.IsFaulted)
{
signInCompleted.SetException(authTask.Exception);
StartCoroutine(OnFailure(authTask.Exception));
}
else
{
signInCompleted.SetResult(authTask.Result);
StartCoroutine(OnSuccess(authTask.Result));
}
});
协程如下
private IEnumerator OnSuccess(FirebaseUser authTaskResult)
{
yield return new WaitForEndOfFrame();
Debug.Log("OnSuccess");
// Do stuff here
}
private IEnumerator OnFailure(AggregateException authTaskException)
{
yield return new WaitForEndOfFrame();
// Do stuff here
}
就我而言,这是一个 r8/proguard 问题。我已将这些行添加到混淆器规则中,它不再崩溃:
-keep class com.google.googlesignin.** { *; }
-keep class com.google.android.gms.auth.** { *; }
您好,我使用相同的脚本并遇到相同的问题。这个问题背后的原因是“
AddToInformation()
”正在改变统一引擎中的某些内容,正如帕特里克所说。AddToInformation()
”函数。它仅用于调试目的,不会影响功能。
我遇到了构建的 APK 最后崩溃的问题。问题在于依赖性,我通过更改“资产”>“外部依赖项管理器”>“android”>“设置”上的设置来解决它。并关闭自动分辨率。然后删除 .aar 文件。之后我解决了依赖关系。这解决了我的问题,希望有帮助。了解更多信息
Firebase for Unity 示例应用程序崩溃:无法找到类“com.google.android.gms.common.api.PendingResult”
对我来说,登录之前我必须在一行代码中使用
FirebaseAuth.DefaultInstance
,否则每次都会崩溃。
_ = FirebaseAuth.DefaultInstance;
Credential credential = GoogleAuthProvider.GetCredential( [...] );