栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Unity接入Google登录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity接入Google登录

Unity接入Google登录
  • 接入FireBaseSdk和GoogleSignIn插件
    • FireBase接入文档
    • GoogleSignIn
  • 编写登录代码
  • 可能出现的问题
    • 运行时弹出Google登录界面,选了账号后没有反应
    • 出现DllNotFoundException: native-googlesignin
  • 参考

接入FireBaseSdk和GoogleSignIn插件 FireBase接入文档

https://firebase.google.com/download/unity?authuser=0
接入FireBase时,FirebaseAuth.unitypackage必须接入,这是使用FireBase进行身份验证的入口

GoogleSignIn

https://github.com/googlesamples/google-signin-unity

编写登录代码
public FirebaseAuth auth;
    
    // Start is called before the first frame update
    void Start()
    {
        GoogleSignIn.Configuration = new GoogleSignInConfiguration()
        {
            RequestIdToken = true,
            //此处填写从FireBase控制台上下载的配置文件中client_id client_type == 3 的 oauth的值
            WebClientId = ""
        };
    }

    private void OnGUI()
    {
        if (GUI.Button(new Rect(2000,300,100,100), "Google"))
        {
            Debug.Log("GoogleLogin()");

            auth = FirebaseAuth.DefaultInstance;
            Task signIn = GoogleSignIn.DefaultInstance.SignIn();

            TaskCompletionSource signInCompleted = new TaskCompletionSource();
            signIn.ContinueWith(task =>
            {
                if (task.IsCanceled)
                {
                    Debug.Log("signIn.ContinueWith Login cancel");
                    signInCompleted.SetCanceled();
                }
                else if (task.IsFaulted)
                {
                    Debug.Log("signIn.ContinueWith Login error : " + task.Exception.Message);
                    signInCompleted.SetException(task.Exception);
                }
                else
                {
                    var result = ((Task) task).Result;
                    Credential credential =
                        Firebase.Auth.GoogleAuthProvider.GetCredential(result.IdToken,
                            null);
                    auth.SignInWithCredentialAsync(credential).ContinueWith (authTask => {
                        if (authTask.IsCanceled) {
                            Debug.LogError("SignInWithCredentialAsync was canceled.");
                            signInCompleted.SetCanceled();
                        } else if (authTask.IsFaulted)
                        {
                            Debug.LogError("SignInWithCredentialAsync encountered an error: " + authTask.Exception);
                            signInCompleted.SetException(authTask.Exception);
                        } else
                        {
                            Debug.Log("Login Google success");
                            signInCompleted.SetResult(((Task) authTask).Result);
                            FirebaseUser newUser = authTask.Result;
                            Debug.Log("DisplayName:" + newUser.DisplayName + "  provierId:" + newUser.ProviderId 
                                      +"  userid:" + newUser.UserId + "  newUserid:" + newUser.TokenAsync(false).Id
                                      + "  koTen:" + newUser.TokenAsync(false).Result);
                        
                        }
                    });
                }
            });
        }
    }

注意:webClient必须要有值,填写值为FireBase控制台上下载的配置文件中client_type == 3 的 oauth的值

可能出现的问题 运行时弹出Google登录界面,选了账号后没有反应

测试时使用国内机无法登录,在android studio中查看日志会看到有报错

Failed to validate DexClassLoader. java.lang.ClassNotFoundException: Didn’t find class “com.google.android.gms.chimera.DynamiteModuleInitializer”

但是使用XiaoMi 9T海外机时可以正常登录,可能时因为Play服务版本问题造成

出现DllNotFoundException: native-googlesignin

不使用package包导入,下载github上的demo用例,直接把用例上的文件复制粘贴过来

参考

https://firebase.google.com/docs/auth/unity/google-signin?hl=zh&authuser=0
https://github.com/googlesamples/google-signin-unity
https://blog.csdn.net/Good_V/article/details/114528453

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号