Xamarin形成Facebook登录按钮

时间:2015-06-02 15:50:42

标签: android facebook xamarin xamarin.forms

我正在尝试在xamarin表单项目中使用Xamarin Facebook Sdk组件。 基本上,我在我的PCL中创建了一个视图,并为android创建了一个自定义渲染器实现,如下所示的代码:

 [assembly: ExportRenderer (typeof (LoginButtonFacebook), typeof (LoginButtonFacebookRenderer))]
 namespace Everest.Droid
 {
public class LoginButtonFacebookRenderer : ViewRenderer<LoginButtonFacebook, Android.Views.View>
{
    protected override void OnElementChanged (ElementChangedEventArgs<LoginButtonFacebook> e)
    {
        base.OnElementChanged (e);

        if (Control == null) 
        {
            FacebookSdk.SdkInitialize (MainActivity.Instance);
            var callbackManager = CallbackManagerFactory.Create ();

            var loginCallback = new FacebookCallback<LoginResult> {
                HandleSuccess = loginResult => {
                    DebugUtil.WriteLine ("Logged in with facebook");
                },
                HandleCancel = () => {
                    DebugUtil.WriteLine ("Login with facebook cancel");
                },
                HandleError = loginError => {
                    DebugUtil.WriteLine ("Login with facebook error");
                }
            };
            LoginManager.Instance.RegisterCallback (callbackManager, loginCallback);

            LoginButton button = new LoginButton (this.Context);
            button.LayoutParameters = new LayoutParams (LayoutParams.WrapContent, LayoutParams.WrapContent);
            button.SetToolTipMode (LoginButton.ToolTipMode.NeverDisplay);
            var permissions = new List<string> { "public_profile", "email" };

            button.SetReadPermissions (permissions);
            button.Click += (object sender, EventArgs ev) => 
            {
                var loginManager = LoginManager.Instance;
                if (loginManager != null)
                    loginManager.LogInWithReadPermissions (MainActivity.Instance, permissions);
            };

            this.SetNativeControl (button);
        }
        (...)

当我点击facebook登录按钮时,它会抛出以下NullPointerException:

[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] java.lang.NullPointerException
[AndroidRuntime]    at com.facebook.login.LoginManager.getLogger(LoginManager.java:392)
[AndroidRuntime]    at com.facebook.login.LoginManager.logStartLogin(LoginManager.java:403)
[AndroidRuntime]    at com.facebook.login.LoginManager.startLogin(LoginManager.java:360)
[AndroidRuntime]    at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:262)
[AndroidRuntime]    at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
[AndroidRuntime]    at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:29)
[AndroidRuntime]    at com.facebook.FacebookButtonBase.callExternalOnClickListener(FacebookButtonBase.java:204)
[AndroidRuntime]    at com.facebook.login.widget.LoginButton.access$1100(LoginButton.java:55)
[AndroidRuntime]    at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:764)
[AndroidRuntime]    at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:361)
[AndroidRuntime]    at android.view.View.performClick(View.java:4261)
[AndroidRuntime]    at android.view.View$PerformClick.run(View.java:17420)
[AndroidRuntime]    at android.os.Handler.handleCallback(Handler.java:615)
[AndroidRuntime]    at android.os.Handler.dispatchMessage(Handler.java:92)
[AndroidRuntime]    at android.os.Looper.loop(Looper.java:137)
[AndroidRuntime]    at android.app.ActivityThread.main(ActivityThread.java:4947)
[AndroidRuntime]    at java.lang.reflect.Method.invokeNative(Native Method)
[AndroidRuntime]    at java.lang.reflect.Method.invoke(Method.java:511)
[AndroidRuntime]    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
[AndroidRuntime]    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
[AndroidRuntime]    at dalvik.system.NativeStart.main(Native Method)

我不知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

我创建了一个示例项目,它完全按照您在此处描述的内容进行操作。 您可以查看here