我正在尝试在Unity游戏项目中实施Firebase身份验证系统。一切都在网站的控制台面板上正确设置。我已经阅读了文档,无法使用Unity内Firebase中的任何API登录Google。所以我买了Prime31的Unity游戏服务插件。
以下是我的问题:
如何在Firebase中使用Google进行身份验证?我是否需要自己管理Google登录?
在Firebase文档中,我找到了:
"用户成功登录后,更换Firebase凭据的访问令牌,并使用Firebase凭据对Firebase进行身份验证:"
Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
//......//
});
如何获取googleIdToken,googleAccessToken作为上述参数传递?
请帮忙(带代码)。我非常喜欢Firebase,并希望在没有像PRIME31这样的第三方插件的情况下使用它。
答案 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
}
}
});