C# Unity/Firebase如何使用Google进行身份验证?
我正试图在我的Unity游戏项目中实现Firebase身份验证系统。网站控制台面板上的所有内容都已正确设置。我已经阅读了文档,但找不到在Unity的Firebase中使用任何api登录Google的方法。所以我为Unity购买了Prime31的Play GameServices插件 以下是我的问题:C# Unity/Firebase如何使用Google进行身份验证?,c#,android,firebase,unity3d,firebase-authentication,C#,Android,Firebase,Unity3d,Firebase Authentication,我正试图在我的Unity游戏项目中实现Firebase身份验证系统。网站控制台面板上的所有内容都已正确设置。我已经阅读了文档,但找不到在Unity的Firebase中使用任何api登录Google的方法。所以我为Unity购买了Prime31的Play GameServices插件 以下是我的问题: 如何在Firebase中使用Google进行身份验证?我需要自己管理谷歌登录吗 在Firebase文档中,我确实发现: 用户成功登录后,将访问令牌交换为Firebase凭据,并使用Firebase凭
Firebase.Auth.Credential Credential=Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken,googleAccessToken);
身份验证签名与凭证同步(凭证)。继续(任务=>{
//......//
});代码>
如何获取作为上述参数传递的googleIdToken、googleAccessToken
请(用代码)帮助。我真的很喜欢Firebase,希望它能在没有任何第三方插件(如PRIME31)的情况下工作。以下是验证完成后从Firebase获取访问令牌的代码
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getToken(true)
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (dialog != null) {
dialog.dismiss();
}
if (task.isSuccessful()) {
String idToken = task.getResult().getToken();
Log.i(getClass().getName(), "got access token :" + idToken);
} else {
// show logs
}
}
});
FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
缪斯·盖托肯(真)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
如果(对话框!=null){
dialog.dismise();
}
if(task.issusccessful()){
字符串idToken=task.getResult().getToken();
Log.i(getClass().getName(),“获取访问令牌:”+idToken);
}否则{
//显示日志
}
}
});
首先,您需要使用Google登录Unity插件登录Google,然后在登录时获取令牌并继续使用Firebase Auth。您还可以尝试使用此资产。简单的答案是,在Unity的Firebase SDK插件中,无法在Unity应用程序中完成Google的全部身份验证。我建议按照电子邮件/密码登录说明开始。
如果你真的想要谷歌登录(你可能会为一个航运标题这样做),这个例子应该引导你通过它:
关键是从Google获得id令牌(这是Firebase插件的一个单独步骤),然后将其传递进来
我希望这有帮助(即使不是及时的) 以下是我的Google SignIn代码的全部内容,包括Firebase身份验证和Google SignIn库:
private void SignInWithGoogle(bool linkWithCurrentAnonUser)
{
GoogleSignIn.Configuration = new GoogleSignInConfiguration
{
RequestIdToken = true,
// Copy this value from the google-service.json file.
// oauth_client with type == 3
WebClientId = "[YOUR API CLIENT ID HERE].apps.googleusercontent.com"
};
Task<GoogleSignInUser> signIn = GoogleSignIn.DefaultInstance.SignIn();
TaskCompletionSource<FirebaseUser> signInCompleted = new TaskCompletionSource<FirebaseUser>();
signIn.ContinueWith(task =>
{
if (task.IsCanceled)
{
signInCompleted.SetCanceled();
}
else if (task.IsFaulted)
{
signInCompleted.SetException(task.Exception);
}
else
{
Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(((Task<GoogleSignInUser>)task).Result.IdToken, null);
if (linkWithCurrentAnonUser)
{
mAuth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(HandleLoginResult);
}
else
{
SignInWithCredential(credential);
}
}
});
}
mAuth
是对FirebaseAuth的引用:
mAuth = Firebase.Auth.FirebaseAuth.DefaultInstance;
一步一步的指导帮助我看@sushingoverhi Matthew,你的代码缺少“HandleLoginResult”引用。请你发布完整的代码好吗?嘿@Matthew,这么说已经一年多了,我很好奇这对你是否仍然有效。我也在尝试做同样的事情,但无法让Android或iOS在我的编辑器上运行。这是否仅适用于构建,而不适用于Unity editor?Android错误为异常:未找到字段currentActivity或类型签名
,而iOS错误为EntryPointNotFoundException:GoogleSignIn\u Create
。我无法编辑上面的评论,因此我为好奇的其他人添加此评论。这只适用于构建(AFAIK),而不适用于Unity editor。我只能让它在实际设备上运行。
mAuth = Firebase.Auth.FirebaseAuth.DefaultInstance;