经过几个小时的研究,我一直在努力把这件事做完。我已经做了进一步的和必要的改进,这就是我所拥有的。我能够成功登录,但我下一步要做的是让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
{
}
}
}
}
}发布于 2017-06-21 08:37:49
我看到您尝试为您的IOnCompleteListener实现LoginActivity,但是我没有在代码中找到public void OnComplete(Task task),请确保您已经实现了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);
}
}https://stackoverflow.com/questions/44659513
复制相似问题