Android 本机Facebooklogin到Xamarin WebApp

Android 本机Facebooklogin到Xamarin WebApp,android,ios,facebook,xamarin,web-applications,Android,Ios,Facebook,Xamarin,Web Applications,我有一个webapp,你可以使用Facebook和谷歌登录。我现在将Webapp打包在一个原生的Xamarin应用程序中(不是表单-我应该使用表单吗?)。 如何创建本机Facebooklogin(使用facebook应用程序),而不是在webview中启动facebook 如何创建本机Facebooklogin(使用facebook应用程序),而不是在webview中启动facebook 您可以按照以下步骤向应用程序添加facebook登录功能: 在NugetPackageManager中搜索,

我有一个webapp,你可以使用Facebook和谷歌登录。我现在将Webapp打包在一个原生的Xamarin应用程序中(不是表单-我应该使用表单吗?)。 如何创建本机Facebooklogin(使用facebook应用程序),而不是在webview中启动facebook

如何创建本机Facebooklogin(使用facebook应用程序),而不是在webview中启动facebook

您可以按照以下步骤向应用程序添加facebook登录功能:

  • NugetPackageManager
    中搜索,并将其添加到您的Xamarin.Android应用程序中

  • com.facebook.FacebookActivity
    添加到您的清单中:

    <application android:label="YourProjectName">
    <activity android:name="com.facebook.FacebookActivity"
          android:configChanges=
            "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
          android:theme="@android:style/Theme.Translucent.NoTitleBar"
          android:label="@string/ApplicationName" />
    </application>
    
  • 在MainActivity.cs中添加
    元数据
    权限
    属性,如下所示:

    [assembly:MetaData("com.facebook.sdk.ApplicationId",Value = "@string/facebook_app_id")]
    [assembly:Permission(Name = Android.Manifest.Permission.Internet)]
    [assembly:Permission(Name = Android.Manifest.Permission.WriteExternalStorage)]
    namespace YourProjectName
    {
       ...
    }
    
  • com.facebook.login.widget.LoginButton
    添加到您的
    xaml

    <resources>
         ...
        <string name="ApplicationName">YourProjectName</string>
        <string name="facebook_app_id">1429006317193169</string>
    </resources>
    
    <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/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />
    </LinearLayout>
    
    
    
  • 在活动中注册登录回调:

    public class MainActivity : Activity
    {
        ICallbackManager callbackManager;
        LoginButton btnLogin;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
    
            SetContentView (Resource.Layout.Main);
            callbackManager = CallbackManagerFactory.Create();
            btnLogin = FindViewById<LoginButton>(Resource.Id.btnLogin);
    
            LoginManager.Instance.RegisterCallback(callbackManager, new MyCallbackResult());
        }
    
    
    
        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
        {
            int code = 0;
            if (resultCode == Result.Ok)
            {
                code = -1;
            }
            else if (resultCode == Result.FirstUser)
            {
                code = 1;
            }
            callbackManager.OnActivityResult(requestCode, code, data);
        }
    }
    
    public class MyCallbackResult : Java.Lang.Object, IFacebookCallback
    {
        public void OnCancel()
        {
            //login cancel callback
        }
    
        public void OnError(FacebookException p0)
        {
            //login error callback
        }
    
        public void OnSuccess(Java.Lang.Object p0)
        {
           //Login success callback
        }
    }
    
    公共类main活动:活动
    {
    ICallbackManager callbackManager;
    登录按钮;
    创建时受保护的覆盖无效(捆绑包)
    {
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);
    callbackManager=CallbackManagerFactory.Create();
    btnLogin=findviewbyd(Resource.Id.btnLogin);
    LoginManager.Instance.RegisterCallback(callbackManager,new MyCallbackResult());
    }
    受保护的覆盖void OnActivityResult(int请求代码、[GeneratedEnum]结果代码、意图数据)
    {
    int代码=0;
    if(resultCode==Result.Ok)
    {
    代码=-1;
    }
    else if(resultCode==Result.FirstUser)
    {
    代码=1;
    }
    callbackManager.OnActivityResult(请求代码、代码、数据);
    }
    }
    公共类MyCallbackResult:Java.Lang.Object,IFacebookCallback
    {
    公开作废
    {
    //登录取消回调
    }
    公共无效OnError(FacebookException p0)
    {
    //登录错误回调
    }
    成功时的公共void(Java.Lang.Object p0)
    {
    //登录成功回调
    }
    }
    

  • 你是怎么包装的?使用webview并加载远程网站?不确定,但可能必须使用Xamarin Facebook SDK是的,在iOS中我使用WKWebView,但我想我会迁移到表单不确定这是否可行。如果您能够从C#收听javascript事件(例如,点击按钮),并在那里处理它,然后使用Xamarin Facebook SDK登录并将结果传递回您的网站,这是可能的。谢谢您的回答。我使用的是Xamarin表单,因此我必须尝试使用本机页面实现您的解决方案。我希望它能像它应该的那样工作。