2

I'm trying to use Xamarin Facebook Sdk component in a xamarin forms project. Basically, I created a view in my PCL and a custom renderer implementation for android, like the code shown below:

 [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);
        }
        (...)

It happens that when i click on facebook login button, it throws the following 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)

I don't know what i'm doing wrong.

rdon
  • 201
  • 5
  • 15

1 Answers1

0

I have created a sample project which does exactly what you describe here. You can check it here:

Community
  • 1
  • 1
IdoT
  • 2,831
  • 1
  • 24
  • 35
  • Thanks for your answer. I saw your sample project, but facebook sdk was updated, and so your project is now obsolete. For instance, Session class is no more – rdon Jun 03 '15 at 09:42
  • Yep I haven't updated it yet, perhaps I'll do it on the weekend. I'll update you here if I'll do it. – IdoT Jun 03 '15 at 11:04