Facebook集成在Libgdx

Facebook集成在Libgdx

问题描述:

我试图在我的游戏中整合Facebook登录,但自从现在我无法实现这一点。Facebook集成在Libgdx

我按照指令:

https://github.com/libgdx/libgdx/wiki/Interfacing-with-platform-specific-code

而且创建了接口,并实现了它的Android项目,但仍然没有成功。当我打电话给我的登录Facebook功能时,它显示我一个循环加载屏幕,我的游戏屏幕回来。

public class AndroidFacebookAdapter implements FacebookIntegration { 

    private String name; 
    private Activity androidActivity; 

    public AndroidFacebookAdapter(Activity andAct) { 
     super(); 
     this.name = ""; 
     this.androidActivity = andAct ; 
    } 



    @Override 
    public void loginFacebook() { 

     Gdx.app.log("AndroidFacebookAdapter"," Facebook login starts"); 

     //Session.openActiveSession(this, allowLoginUI, callback) 
     androidActivity.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       Gdx.app.log("AndroidFacebookAdapter"," runOnUiThread runs"); 
       Session.openActiveSession(androidActivity, true, new Session.StatusCallback() { 

        // callback when session changes state 
        @Override 
        public void call(Session session, SessionState state, Exception exception) { 
         if (session.isOpened()) { 
         Gdx.app.log("AndroidFacebookAdapter"," session.isOpened returns true "); 
         // make request to the /me API 
         Request.newMeRequest(session, new Request.GraphUserCallback() { 

          // callback after Graph API response with user object 
          @Override 
          public void onCompleted(GraphUser user, Response response) { 
          if (user != null) { 
           Gdx.app.log("AndroidFacebookAdapter"," Facebook Login Succefull"); 
           name = user.getName(); 
          } 
          } 
         }).executeAsync(); 
         } 
        } 
        });    

      } 
     }); 


    } 

    @Override 
    public String getName() { 

     return name; 
    } 

} 

在我的Android项目中,我将这个接口发送给核心项目。

andAdap = new AndroidFacebookAdapter(this); 

    initialize(new MyGdxGame(andAdap), config); 

我在触摸屏幕时调用它。

game.facebookIntegration.loginFacebook(); 

在logcat中,我看到:

10-27 13:06:47.988: I/AndroidFacebookAdapter(16774): Facebook login starts 
10-27 13:06:47.988: I/AndroidFacebookAdapter(16774): runOnUiThread runs 

后,我看到一个圆形的加载屏幕(没有在屏幕上只显示黑白),然后我的游戏画面再回来。在哪一步我犯了一个错误?

谢谢你的回答。

编辑1:在意识到我已经登录我的Facebook帐户后,我退出了。然后再试一次,它工作。它是开放的Facebook应用程序要求我的凭据,但即使我输入正确的用户名/密码我的“onCompleted”功能不被称为。

编辑2:现在我的问题解决了,感谢教程在http://blog.supercookie.co.uk/post/94802569132/facebook-integration-w-libgdx 我只需要使用UiLifecycleHelper类和它的实现。现在我的界面实现了课堂。

public class AndroidFacebookAdapter implements FacebookIntegration { 

    private String name; 
    public AndroidLauncher androidActivity; 
    private final UiLifecycleHelper uiHelper; 

    public AndroidFacebookAdapter(Activity andAct) { 
     super(); 
     this.name = ""; 
     this.androidActivity = (AndroidLauncher) andAct ; 
     this.uiHelper = new UiLifecycleHelper(this.androidActivity, new Session.StatusCallback() { 
      @Override 
      public void call(Session session, SessionState sessionState, Exception e) { 

      } 
     }); 
    } 


    private void loginFacebookImp() { 

     Gdx.app.log("AndroidFacebookAdapter"," Facebook login starts"); 

     androidActivity.runOnUiThread(new Runnable() 
     { 

      @Override 
      public void run() 
      { 
       Gdx.app.log("AndroidFacebookAdapter"," runOnUiThread runs"); 
       Session.openActiveSession(androidActivity, true, new Session.StatusCallback() 
       { 

        // callback when session changes state 
        @Override 
        public void call(Session session, SessionState state, Exception exception) 
        { 
         Gdx.app.log("AndroidFacebookAdapter"," openActiveSession call start"); 
         if (session.isOpened()) 
         { 
          Gdx.app.log("AndroidFacebookAdapter"," session.isOpened returns true "); 
          // make request to the /me API 
          Request.newMeRequest(session, new Request.GraphUserCallback() 
          { 

            // callback after Graph API response with user object 
            @Override 
            public void onCompleted(GraphUser user, Response response) { 
             Gdx.app.log("AndroidFacebookAdapter"," onCompleted start"); 
            if (user != null) { 
             Gdx.app.log("AndroidFacebookAdapter"," Facebook Login Succesfull"); 
             Gdx.app.log("AndroidFacebookAdapter"," Facebook name is " + user.getName()); 
             name = user.getName(); 
            } 
            else 
            { 
             Gdx.app.log("AndroidFacebookAdapter"," Facebook Login failed"); 
            } 
            } 
          }).executeAsync(); 
         } 
         else 
         { 
          Gdx.app.log("AndroidFacebookAdapter"," session.isOpened() is false"); 
         } 
        } 
        });    

      } 
     }); 




    } 

    private boolean isLoggedInImp() 
    { 
     return Session.getActiveSession() != null && Session.getActiveSession().isOpened(); 
    } 

    @Override 
    public String getName() {  
     return name; 
    } 



    @Override 
    public void loginFacebook() { 
     loginFacebookImp();  
    } 

    public void onCreate(Bundle savedInstanceState) { 
     uiHelper.onCreate(savedInstanceState); 
    } 

    public void onResume() { 
     uiHelper.onResume(); 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

    public void onSaveInstanceState(Bundle outState) { 
     uiHelper.onSaveInstanceState(outState); 
    } 

    public void onPause() { 
     uiHelper.onPause(); 
    } 

    public void onStop() { 
     uiHelper.onStop(); 
    } 

    public void onDestroy() { 
     uiHelper.onDestroy(); 
    } 


    @Override 
    public boolean isLoggedIn() { 

     return isLoggedInImp(); 
    } 

} 
+0

现在我可以打开facebook应用程序的身份验证,但我不能得到用户信息。编辑。 – bkaramik 2014-10-28 20:44:58

在编辑2中,只需添加UiLifecycleHelper android侧接口实现类即可。然后它按预期工作。欲了解更多解释: http://blog.supercookie.co.uk/post/94802569132/facebook-integration-w-libgdx