好的,所以我将在此处发布我是如何设置的,使用 LibGDX 和 GPGS,并且在注销后登录时显示弹出窗口没有任何问题。
首先声明我的 Android 项目:
public class MainActivity extends AndroidApplication implements RequestHandler, GameHelperListener,
GoogleInterface, RealTimeMessageReceivedListener, RoomStatusUpdateListener, RoomUpdateListener,
OnInvitationReceivedListener, RealTimeReliableMessageSentListener, OnImageLoadedListener, OnStateLoadedListener, ConnectionCallbacks{
private GameHelper mHelper;
private GameHelperInterface mGHInterface = null;
private ConfirmInterface mConfirmInterface = null;
private Handler libGDXHandler;
GoogleInterface 用于从 LibGDX 线程传递到 Android 线程,GameHelperInterface 和 ConfirmInterface 用于将内容从 android 传递到房子的 libGDX 端(我使用 confirmInteface 来登录东西,另一个用于消息传递等...)处理程序是确保来自 LibGDX 端的任何内容正确发布在 Android 线程上(就像来自 Android 的 libGDX 端的任何内容使用 Gdx.app.postRunnable() 发布)
现在我在 onCreate() 中声明
.. setup the gameView etc..
mHelper.setup(this, GameHelper.CLIENT_GAMES | GameHelper.CLIENT_APPSTATE | GameHelper.CLIENT_PLUS, null);
mHelper.getPlusClient().registerConnectionCallbacks(this);
onStart 和 onStop :
@Override
public void onStart(){
super.onStart();
mHelper.onStart(this);
}
@Override
public void onStop(){
super.onStop();
mHelper.onStop();
}
Android 代码中的 Login 和 Logout 方法
@Override
public void Login() {
libGDXHandler.post(new Runnable() {
@Override
public void run() {
dLog("beginUserInitatedSignIn()");
//mHelper.signOut();
mHelper.beginUserInitiatedSignIn();
}
});
}
@Override
public void LogOut() {
iServerBadAttempts = -1;
mHelper.signOut();
}
使用 iServerBadAttempts 以便当我在 libGDX 中启动 Screen 进程时,我可以要求 Android 端给我该变量...如果它是 -1,那么我知道之前没有尝试过登录,并且可以适当地设置我的谷歌登录按钮,否则我会检查连接状态和其他一些事情来设置我正确使用的按钮。
为了以防万一,下面是我告诉我的 libGDX 代码 mHelper 成功登录的方式:
@Override
public void onSignInSucceeded() {
dLog("signed in");
mConfirmInterface.googleSucceeded();
if (mHelper.getInvitationId() != null) {
acceptInviteToRoom(mHelper.getInvitationId());
mConfirmInterface.acceptedInvitation();
}
}
这里是登录和退出的logcat
09-24 09:14:31.495:I/SplashScreen(6021):进行 Google 登录
09-24 09:14:31.495: D/LDGame MainActivity(6021): beginUserInitatedSignIn()
09-24 09:14:31.495:D/Helper(6021):启动用户发起的登录流程。
09-24 09:14:31.495: D/Helper(6021): isGooglePlayServicesAvailable 返回 0
09-24 09:14:31.495: D/Helper(6021): beginUserInitiatedSignIn: 开始新的登录流程。
09-24 09:14:31.495:D/Helper(6021):开始连接。
09-24 09:14:31.495: D/Helper(6021): 状态改变 DISCONNECTED -> CONNECTING
09-24 09:14:31.495:D/Helper(6021):connectNextClient:请求的客户端:7,连接的客户端:0
09-24 09:14:31.495:D/Helper(6021):待定客户:7
09-24 09:14:31.495:D/Helper(6021):连接 GamesClient。
09-24 09:14:31.535: D/Helper(6021): onConnectionFailed
09-24 09:14:31.535:D/Helper(6021):连接失败:
09-24 09:14:31.535:D/Helper(6021):-代码:SIGN_IN_REQUIRED(4)
09-24 09:14:31.535: D/Helper(6021): - 可解析: true
09-24 09:14:31.535: D/Helper(6021): - 详细信息: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{41d914d0: android.os.BinderProxy@41ef40c8}}
09-24 09:14:31.535: D/Helper(6021): onConnectionFailed: 由于用户启动登录,正在解决问题。
09-24 09:14:31.535: D/Helper(6021): resolveConnectionResult: 试图解决结果: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{41d914d0: android.os.BinderProxy@41ef40c8}}
09-24 09:14:31.535:D/Helper(6021):结果有分辨率。启动它。
09-24 09:14:31.615:I/ScreenLog(6021):屏幕暂停:SplashScreen
09-24 09:14:31.615: D/SensorManager(6021): unregisterListener:: Listener= com.badlogic.gdx.backends.android.AndroidInput$SensorListener@41dc06e0
09-24 09:14:31.615:I/AndroidGraphics(6021):暂停
09-24 09:14:31.615: D/Sensors(6021): Remain listener = Sending .. normal delay 200ms
09-24 09:14:31.615:I/传感器(6021):sendDelay --- 200000000
09-24 09:14:31.615: D/SensorManager(6021): JNI-sendDelay
09-24 09:14:31.615: I/SensorManager(6021): 设置正常延迟 = true
09-24 09:14:31.615: D/SensorManager(6021): unregisterListener:: Listener= com.badlogic.gdx.backends.android.AndroidInput$SensorListener@41db99a0
09-24 09:14:31.615: D/Sensors(6021): Remain listener = Sending .. normal delay 200ms
09-24 09:14:31.615:I/传感器(6021):sendDelay --- 200000000
09-24 09:14:31.620: D/SensorManager(6021): JNI-sendDelay
09-24 09:14:31.620: I/SensorManager(6021): 设置正常延迟 = true
09-24 09:14:31.620: I/AndroidInput(6021): 传感器监听器拆除
09-24 09:14:32.220: W/IInputConnectionWrapper(6021): showStatusIcon on inactive InputConnection
09-24 09:14:37.010: D/Helper(6021): onActivityResult: req=RC_RESOLVE, resp=RESULT_OK
09-24 09:14:37.010: D/Helper(6021): onAR: 分辨率为 RESULT_OK,因此再次连接当前客户端。
09-24 09:14:37.065: D/LDGame MainActivity(6021): 活动结果
09-24 09:14:37.065: D/SensorManager(6021): registerListener :: 句柄 = 0 名称 = LSM330DLC 3 轴加速度计延迟 = 20000 监听器 = com.badlogic.gdx.backends.android.AndroidInput$SensorListener@41ef6c38
09-24 09:14:37.070: D/SensorManager(6021): registerListener :: 句柄 = 1 名称 = AK8975C 3 轴磁场传感器延迟 = 20000 监听器 = com.badlogic.gdx.backends.android.AndroidInput$SensorListener@ 41ef6f00
09-24 09:14:37.070: I/AndroidInput(6021): 传感器监听器设置
09-24 09:14:37.100:I/ScreenLog(6021):屏幕调整大小:SplashScreen
09-24 09:14:37.100:I/ScreenLog(6021):屏幕恢复:SplashScreen
09-24 09:14:37.160: D/dalvikvm(6021): GC_CONCURRENT 释放 674K,13% 释放 13233K/15047K,暂停 7ms+3ms,共 61ms
09-24 09:14:37.160: D/dalvikvm(6021): WAIT_FOR_CONCURRENT_GC 阻塞 22ms
09-24 09:14:37.180: D/dalvikvm(6021): GC_FOR_ALLOC 释放 10K,13% 释放 13222K/15047K,暂停 18ms,总共 18ms
09-24 09:14:37.180:I/dalvikvm-heap(6021):将堆(碎片情况)增加到 13.932MB,分配 313374 字节
09-24 09:14:37.200: D/dalvikvm(6021): GC_FOR_ALLOC 释放 CONNECTED
09-24 09:14:38.090: D/Helper(6021): 通知 LISTENER 登录成功
09-24 09:14:38.090: D/LDGame MainActivity(6021): 登录
对于登录,重点是您应该看到“D/Helper(6021): onConnectionFailed: since user started sign-in,solving problem.”因为这意味着以前可以注销
并退出 logcat
09-24 09:14:52.145:D/Helper(6021):清除 PlusClient 上的默认帐户。
09-24 09:14:52.165:D/Helper(6021):从 GamesClient 注销。
09-24 09:14:52.190:D/Helper(6021):继续断开连接。
09-24 09:14:52.190:D/Helper(6021):killConnections:杀死连接。
09-24 09:14:52.190:D/Helper(6021):断开 GamesClient。
09-24 09:14:52.195:D/Helper(6021):断开 PlusClient。
09-24 09:14:52.195:D/Helper(6021):断开 AppStateClient。
09-24 09:14:52.195:D/Helper(6021):killConnections:所有客户端断开连接。
09-24 09:14:52.195: D/Helper(6021): 状态改变 CONNECTED -> DISCONNECTED
希望有帮助!