我正在尝试将 Facebook 登录集成到我的游戏中,但从现在开始我无法实现这一点。
我已按照以下说明进行操作:
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 项目中,我将此接口(interface)发送到核心项目。
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();
}
}
最佳答案
和edit 2一样,只添加UiLifecycleHelper android端接口(interface)实现类。然后它按预期工作。更多解释: http://blog.supercookie.co.uk/post/94802569132/facebook-integration-w-libgdx
关于android - Libgdx 中的 Facebook 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26586544/