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

时间:2017-05-02 05:54:44

标签: c# android firebase unity3d firebase-authentication

我正在尝试在Unity游戏项目中实施Firebase身份验证系统。一切都在网站的控制台面板上正确设置。我已经阅读了文档,无法使用Unity内Firebase中的任何API登录Google。所以我买了Prime31的Unity游戏服务插件。

以下是我的问题:

  1. 如何在Firebase中使用Google进行身份验证?我是否需要自己管理Google登录?

  2. 在Firebase文档中,我找到了:

  3. "用户成功登录后,更换Firebase凭据的访问令牌,并使用Firebase凭据对Firebase进行身份验证:"

    Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken); auth.SignInWithCredentialAsync(credential).ContinueWith(task => { //......// });

    如何获取googleIdToken,googleAccessToken作为上述参数传递?

    请帮忙(带代码)。我非常喜欢Firebase,并希望在没有像PRIME31这样的第三方插件的情况下使用它。

4 个答案:

答案 0 :(得分:1)

这是我的所有带有Firebase身份验证和GoogleSignIn库的Google登录代码:

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);
            }
         }
      });
   }

该参数用于登录,目的是将新的google帐户与当前登录的匿名用户相关联。如果需要,您可以忽略方法的那些部分。还要注意,在正确初始化Firebase Auth库后,将调用所有这些命令。

我对GoogleSignIn使用了以下库:https://github.com/googlesamples/google-signin-unity

该链接的自述页面将带您逐步了解如何为您的环境进行此设置。在遵循了这些内容并使用了上面的代码之后,我在Android和iOS上都可以使用它。

以下是上面的代码中使用的SignInWithCredential方法:

private void SignInWithCredential(Credential credential)
   {
      if (mAuth != null)
      {
         mAuth.SignInWithCredentialAsync(credential).ContinueWith(HandleLoginResult);
      }
   }

mAuth是对FirebaseAuth的引用:

mAuth = Firebase.Auth.FirebaseAuth.DefaultInstance;

答案 1 :(得分:0)

简单的答案是,Unity的Firebase SDK插件无法在Unity应用程序中进行整个Google身份验证。我建议按照有关电子邮件/密码登录的说明进行操作。 https://firebase.google.com/docs/auth/unity/start

如果您确实希望Google登录(您可能要为运输标题这样做),则此示例将引导您完成操作:https://github.com/googlesamples/google-signin-unity

关键是要从Google获取ID令牌(这是Firebase插件的一个单独步骤),然后将其传递进来。

我希望能有所帮助(即使不及时)!

答案 2 :(得分:-1)

首先,您需要使用Google登录Unity插件登录Google,然后在您登录时获取令牌并继续使用Firebase Auth。您也可以尝试此资产http://u3d.as/JR6

答案 3 :(得分:-3)

以下是在完成身份验证后从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
                            }
                        }
                    });