C# Unity/Firebase如何使用Google进行身份验证?

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凭

我正试图在我的Unity游戏项目中实现Firebase身份验证系统。网站控制台面板上的所有内容都已正确设置。我已经阅读了文档,但找不到在Unity的Firebase中使用任何api登录Google的方法。所以我为Unity购买了Prime31的Play GameServices插件

以下是我的问题:

  • 如何在Firebase中使用Google进行身份验证?我需要自己管理谷歌登录吗

  • 在Firebase文档中,我确实发现:

  • 用户成功登录后,将访问令牌交换为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;