经过数小时的研究,我一直在努力完成这项工作。我已经做了进一步的改进,这就是我所拥有的。我能够成功登录,但接下来要做的是让Firebase显示已登录的用户。这就是我现在几个小时都在苦苦挣扎的事情。
当我从我的代码firebaseAuth.SignInWithCredential(credential).AddOnCompleteListener(this, new IOnCompleteListener<IAuthResult>());
中取出这一行时,我能够成功登录,但用户不会在Firebase上显示。
但是当我包含行firebaseAuth.SignInWithCredential(credential).AddOnCompleteListener(this, new IOnCompleteListener<IAuthResult>());
时,我得到 System.NullReferenceException已被抛出,我实际上并不知道错误的来源。请帮忙。
谢谢。
public class LoginActivity : BaseActivity, IFacebookCallback, IAuthStateListener, IOnCompleteListener
{
private ICallbackManager mCallbackManager;
private Firebase.Auth.FirebaseAuth firebaseAuth;
private IOnCompleteListener listener;
public static FirebaseApp app;
private Firebase.Auth.FirebaseAuth.IAuthStateListener firebaseAuthListener;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
FacebookSdk.SdkInitialize(this.ApplicationContext);
LoginButton button = FindViewById<LoginButton>(Resource.Id.login_button);
button.SetReadPermissions("email","public_profile");
mCallbackManager = CallbackManagerFactory.Create();
button.RegisterCallback(mCallbackManager, this);
}
public void handleFacebookAccessToken(AccessToken accessToken)
{
AuthCredential credential = FacebookAuthProvider.GetCredential(accessToken.Token);
firebaseAuth.SignInWithCredential(credential).AddOnCompleteListener(this, new IOnCompleteListener<IAuthResult>());
}
public void OnAuthStateChanged(Firebase.Auth.FirebaseAuth auth)
{
FirebaseUser user = firebaseAuth.CurrentUser;
if (user != null)
{
Console.WriteLine("The current user is " + firebaseAuth.CurrentUser);
}
Console.WriteLine("The current user is " + firebaseAuth.CurrentUser);
}
public void OnCancel()
{
throw new NotImplementedException();
}
public void OnError(FacebookException p0)
{
throw new NotImplementedException();
}
public void OnSuccess(Java.Lang.Object result)
{
LoginResult loginResult = result as LoginResult;
handleFacebookAccessToken(loginResult.AccessToken);
Console.WriteLine("My token is" + loginResult.AccessToken);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
mCallbackManager.OnActivityResult(requestCode, (int)resultCode, data );
}
protected override void OnStart(){
base.OnStart();
// firebaseAuth.AddAuthStateListener(firebaseAuthListener);
}
protected override void OnStop(){
base.OnStop();
// firebaseAuth.RemoveAuthStateListener(firebaseAuthListener);
}
private class IOnCompleteListener<T> : IOnCompleteListener
{
public IntPtr Handle => throw new NotImplementedException();
public void Dispose()
{
throw new NotImplementedException();
}
public void OnComplete(Android.Gms.Tasks.Task task)
{
if (!task.IsSuccessful)
{
}
else
{
}
}
}
}
}
答案 0 :(得分:2)
我看到您已尝试为IOnCompleteListener
实施LoginActivity
,但我在您的代码中找不到public void OnComplete(Task task)
,请确保您&# 39;已实施Android.Gms.Tasks.IOnCompleteListener
,如果您这样做,则只需将代码firebaseAuth.SignInWithCredential(credential).AddOnCompleteListener(this, new IOnCompleteListener<IAuthResult>());
更改为firebaseAuth.SignInWithCredential(credential).AddOnCompleteListener(this, this);
。
以下是我的演示,它在我身边起作用:
[Activity(Label = "Activity3", Exported = true)]
[IntentFilter(new[] { Intent.ActionView },
DataScheme = "@string/fb_login_protocol_scheme"),]
public class Activity3 : Activity, IFacebookCallback, IOnCompleteListener
{
private ICallbackManager mCallbackManager;
private FirebaseAuth mAuth;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
FacebookSdk.SdkInitialize(this.ApplicationContext);
// Create your application here
SetContentView(Resource.Layout.layout3);
FirebaseApp.InitializeApp(this);
mAuth = FirebaseAuth.Instance;
LoginButton fblogin = FindViewById<LoginButton>(Resource.Id.fblogin);
fblogin.SetReadPermissions("email", "public_profile");
mCallbackManager = CallbackManagerFactory.Create();
fblogin.RegisterCallback(mCallbackManager, this);
}
private void handleFacebookAccessToken(AccessToken accessToken)
{
AuthCredential credential = FacebookAuthProvider.GetCredential(accessToken.Token);
mAuth.SignInWithCredential(credential).AddOnCompleteListener(this, this);
}
//facebook IFacebookCallback implementation
public void OnSuccess(Java.Lang.Object p0)
{
LoginResult loginResult = p0 as LoginResult;
handleFacebookAccessToken(loginResult.AccessToken);
}
public void OnCancel()
{
}
public void OnError(FacebookException p0)
{
}
//firebase IOnCompleteListener implementation
public void OnComplete(Task task)
{
if (task.IsSuccessful)
{
FirebaseUser user = mAuth.CurrentUser;
}
else
{
Toast.MakeText(this, "Authentication failed.", ToastLength.Short).Show();
}
}
// acitivity lifecycle
protected override void OnStart()
{
base.OnStart();
FirebaseUser currentUser = mAuth.CurrentUser;
}
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
var resultCodeNum = 0;
switch (resultCode)
{
case Result.Ok:
resultCodeNum = -1;
break;
case Result.Canceled:
resultCodeNum = 0;
break;
case Result.FirstUser:
resultCodeNum = 1;
break;
}
mCallbackManager.OnActivityResult(requestCode, resultCodeNum, data);
}
}