使用Xamarin Android进行Firebase Facebook身份验证

时间:2017-06-18 14:53:28

标签: c# android firebase xamarin firebase-authentication

我一直在尝试实施Firebase文档中有关如何通过Firebase上的Facebook验证用户的逻辑。但我看起来更专注于native android而不是Xamarin。任何人都可以用材料帮助我吗?我在网上和论坛上搜索过一个样本。

1 个答案:

答案 0 :(得分:7)

  

有人可以用材料帮我吗?我已经在网上和论坛上搜索了一些样本。

我没有找到Xamarin.Android的官方教程,但我认为你仍然可以按照Facebook Login for AndroidAuthenticate Using Facebook Login on Android在Xamarin.Android中补充它,基本上他们非常喜欢。

首先,安装适用于Xamarin的Firebase sdks以及Xamarin.Facebook.Android

然后按照上面教程中的过程进行操作。

这是我的演示:

[Activity(Label = "LoginActivity", Exported = true)]
[IntentFilter(new[] { Intent.ActionView },
DataScheme = "@string/fb_login_protocol_scheme"),]
public class LoginActivity : 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.loginlayout);

        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);
    }
}

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.facebook.login.widget.LoginButton
        android:id="@+id/fblogin"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" />
</LinearLayout>

清单:

<uses-permission android:name="android.permission.INTERNET" />
<application android:label="AndroidFireBase">
  <meta-data android:name="com.facebook.sdk.ApplicationId"
      android:value="@string/facebook_app_id" />