Google Play 游戏服务 - 欢迎 <名称> 弹出窗口不一致

Posted

技术标签:

【中文标题】Google Play 游戏服务 - 欢迎 <名称> 弹出窗口不一致【英文标题】:Google Play Game Services - Welcome <Name> Popup Inconsistent 【发布时间】:2013-09-27 20:23:06 【问题描述】:

我在其他线程中尝试了一些建议(例如在启动时强制注销),但我没有找到解决此问题的方法。问题在于这个弹出窗口:

看起来很不一致,很少出现。

我在我的应用程序启动中添加了一个GameHelper.logout(),试图始终显示此消息,但它没有。

通常情况下,它根本不会出现。

getGameClient().getCurrentUser().getIconImageUri() 之类的调用方法都可以,我可以用这种方式显示图像。此外,我可以发送邀请,人们会和我一起坐在游戏大厅里。

当他们点击游戏主屏幕上的 Google+ 登录按钮时,我是否可以始终如一地显示此消息?

需要注意的是,我使用的是 LibGDX、BaseGameUtils(GameHelper.java)Google Services(当然)。

还有其他人对此有疑问吗?

谢谢!

【问题讨论】:

只是这样我可以尝试一些东西。您是否在以下情况下看到它:在用户注销后(以便您的 Google+ 按钮变回“使用 google 登录”或类似的东西)然后立即重新登录,您是否看到欢迎弹出窗口? 我没有。例如,调用 GameHelper.logout() 后跟 GameHelper.login() 不会导致显示此消息。但是,如果我长时间(多个小时)没有在申请中,则会出现该消息。我几乎觉得令牌问题一直存在于 Google 一方,并阻止我“随意”显示此消息。您以前是否处理过这个问题或有任何见解? 【参考方案1】:

好的,所以我将在此处发布我是如何设置的,使用 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): - 详细信息: ConnectionResultstatusCode=SIGN_IN_REQUIRED, resolution=PendingIntent41d914d0: android.os.BinderProxy@41ef40c8 09-24 09:14:31.535: D/Helper(6021): onConnectionFailed: 由于用户启动登录,正在解决问题。 09-24 09:14:31.535: D/Helper(6021): resolveConnectionResult: 试图解决结果: ConnectionResultstatusCode=SIGN_IN_REQUIRED, resolution=PendingIntent41d914d0: 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

希望有帮助!

【讨论】:

以上是关于Google Play 游戏服务 - 欢迎 <名称> 弹出窗口不一致的主要内容,如果未能解决你的问题,请参考以下文章

获取对快照的引用。 Google Play 游戏服务保存的游戏

打开游戏的时候提示没有google play 服务怎么办?

Google Play 游戏服务:编写保存的游戏

为啥无法登录 Google Play 服务?

Google Play 游戏服务 - 无法登录游戏中心

Android Google Play 游戏服务回合制多人游戏不自动匹配