如何使用 Firebase 统一创建 Facebook 登录?
Posted
技术标签:
【中文标题】如何使用 Firebase 统一创建 Facebook 登录?【英文标题】:How do I create a Facebook login in unity using Firebase? 【发布时间】:2018-12-26 17:25:21 【问题描述】:所以我尝试使用 Firebase 进行统一并为我的项目创建 Facebook 登录。
我已遵循 firebase 文档和 Facebook 开发人员中的所有说明,包括将 SDK 导入我的项目并在 Facebook 登录中添加 appID
keyhashes 单独工作正常,但一旦我尝试将其发送到 Firebase 以保留登录信息,我就会不断收到例外。
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Facebook.Unity;
public class facebookLogin : MonoBehaviour
// Use this for initialization
void Awake()
if (!FB.IsInitialized)
// Initialize the Facebook SDK
FB.Init(InitCallback, OnHideUnity);
else
// Already initialized, signal an app activation App Event
FB.ActivateApp();
private void InitCallback()
if (FB.IsInitialized)
// Signal an app activation App Event
FB.ActivateApp();
// Continue with Facebook SDK
// ...
else
Debug.Log("Failed to Initialize the Facebook SDK");
private void OnHideUnity(bool isGameShown)
if (!isGameShown)
// Pause the game - we will need to hide
Time.timeScale = 0;
else
// Resume the game - we're getting focus again
Time.timeScale = 1;
public void FBlogin()
List<string> permissions = new List<string>();
permissions.Add("public_profile");
permissions.Add("email");
permissions.Add("user_friends");
FB.LogInWithReadPermissions(permissions, AuthCallback);
private void AuthCallback(ILoginResult result)
if (FB.IsLoggedIn)
Firebase.Auth.FirebaseAuth auth =
Firebase.Auth.FirebaseAuth.DefaultInstance;
List<string> permissions = new List<string>();
// AccessToken class will have session details
var aToken = Facebook.Unity.AccessToken.CurrentAccessToken;
// Print current access token's User ID
Debug.Log(aToken.TokenString);
Debug.Log(aToken.UserId);
Firebase.Auth.Credential credential =
Firebase.Auth.FacebookAuthProvider.GetCredential(aToken.TokenString);
auth.SignInWithCredentialAsync(credential).ContinueWith(task
=>
if (task.IsCanceled)
Debug.LogError("SignInWithCredentialAsync was
canceled.");
return;
if (task.IsFaulted)
Debug.LogError("SignInWithCredentialAsync encountered
an error: " + task.Exception);
return;
Firebase.Auth.FirebaseUser newUser = task.Result;
Debug.LogFormat("User signed in successfully: 0 (1)",
newUser.DisplayName, newUser.UserId);
);
// Print current access token's granted permissions
//foreach(string perms in aToken.Permissions)
//
// Debug.Log(perms);
//
else
Debug.Log("User cancelled login");
这里是我的例外:
SignInWithCredentialAsync encountered an error: System.AggregateException: Exception of type 'System.AggregateException' was thrown.
-----------------
Firebase.FirebaseException: An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.
UnityEngine.Debug:LogError(Object)
facebookLogin:<AuthCallback>m__0(Task`1) (at Assets/Script/facebookLogin.cs:82)
System.Threading.Tasks.TaskCompletionSource`1:SetException(AggregateException)
Firebase.Internal.TaskCompletionSourceCompat`1:SetExceptionInternal(TaskCompletionSource`1, AggregateException)
Firebase.Internal.TaskCompletionSourceCompat`1:SetException(TaskCompletionSource`1, AggregateException)
Firebase.Auth.FirebaseAuth:CompleteFirebaseUserTask(Task`1, TaskCompletionSource`1)
Firebase.Auth.<SignInWithCredentialAsync>c__AnonStorey4:<>m__0(Task`1)
System.Threading.Tasks.TaskCompletionSource`1:SetException(Exception)
Firebase.Auth.<GetTask>c__AnonStorey0:<>m__0()
Firebase.Auth.Future_User:SWIG_CompletionDispatcher(Int32)
Firebase.AppUtilPINVOKE:PollCallbacks()
Firebase.AppUtil:PollCallbacks()
Firebase.Platform.FirebaseAppUtils:PollCallbacks()
Firebase.Platform.FirebaseHandler:Update()
Firebase.Platform.FirebaseMonoBehaviour:Update()
我不知道出了什么问题。 SignInWithCredentialAsync
似乎有问题,但我不知道如何解决。
【问题讨论】:
【参考方案1】:我认为您的代码没有任何问题。正如错误所说,似乎有另一个帐户已经注册了您尝试登录的 Facebook 帐户的电子邮件。您的应用是否允许其他登录方式?
来自 Firebase 帮助:
您可以配置用户是否可以创建多个使用 相同的电子邮件地址,但链接到不同的登录方法。 例如,如果您不允许多个帐户使用同一电子邮件 地址,用户无法创建使用 电子邮件地址为 ex@gmail.com 的 Google 帐户(如果已有) 使用电子邮件地址 ex@gmail.com 和 密码。
链接:https://support.google.com/firebase/answer/6400716?hl=en
您可以在 Firebase 控制台中解决此问题。在Authentication > Sign-in Method
,向下滚动,您将看到“每个电子邮件地址多个帐户”部分。允许它,错误应该被修复。
【讨论】:
以上是关于如何使用 Firebase 统一创建 Facebook 登录?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google 登录通过 Firebase 签名后如何访问课堂 API
Firebase SDK 与 Facebook SDK 冲突