2014-10-27 4 views
1

Я пытаюсь интегрировать логин Facebook в свою игру, но с тех пор я не мог этого достичь.Facebook Интеграция в Libgdx

я следовал инструкциям:

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

И создал свой интерфейс и реализовать его для Android проекта, но до сих пор не увенчались успехом. Когда я вызываю свой loginFacebook, он показывает мне круговой экран загрузки, и мой игровой экран возвращается.

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 

После того как я вижу круговой экран загрузки (ничего на экране просто черный), то моя игра экран возвращается снова. На каком этапе я сделал ошибку?

Благодарим за ответы.

EDIT 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 для auth, но я не могу получить информацию о пользователе. Отредактировано. – bkaramik

ответ

Смежные вопросы