【问题标题】:Android Google Play notification does not bring user to game screenAndroid Google Play 通知不会将用户带到游戏屏幕
【发布时间】:2015-07-08 23:06:42
【问题描述】:

与此类似的问题充其量只是微不足道的答案。我正在使用最新的 Google Play 游戏服务 apk 'com.google.android.gms:play-services:7.0.0' 并且我已经实现了 onInvitationReceived()onConnected()

但是,当被邀请者在游戏中接受游戏邀请时,似乎没有调用onInvitationReceived()。虽然我相当肯定 onConnected() 被调用,无论玩家在 mGoogleClient.connect() 之后通过回调连接时发生什么,似乎邀请被丢弃或者因为玩家没有按照我指定的那样重定向到游戏屏幕,如果Bundle 包含一个邀请(我假设在应用关闭时调用它,但无论哪种方式,都只会显示邀请的状态栏通知)。

对此的任何见解将不胜感激。以下是相关方法:

onConnected() 来自一个扩展 AndroidGame 的类,AndroidGame 扩展了 Activity(我在两个类中都尝试过,现在我只是在 AndroidGame 的子类中重写了它):

@Override
public void onConnected(Bundle connectionHint) {
    // Connected to Google Play services!
    // The good stuff goes here.
    Games.Invitations.registerInvitationListener(mGoogleClient, Network.getInstance().mListener);

    if (connectionHint != null) {
        Invitation inv =
                connectionHint.getParcelable(Multiplayer.EXTRA_INVITATION);

        if (inv != null) {
            // accept invitation
            RoomConfig.Builder roomConfigBuilder = RoomConfig.builder(Network.getInstance());
            roomConfigBuilder.setMessageReceivedListener(Network.getInstance());
            roomConfigBuilder.setRoomStatusUpdateListener(Network.getInstance());
            roomConfigBuilder.setInvitationIdToAccept(inv.getInvitationId());
            RoomConfig roomConfig = roomConfigBuilder.build();
            Games.RealTimeMultiplayer.join(mGoogleClient, roomConfig);

            // prevent screen from sleeping during handshake
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

            // go to game screen
            setScreen(new CharSelectScreen(this));
        }
    }
}

onInvitationReceived 来自我的 Network 类,它基本上是一个处理其他侦听器的单例。 onInvitationReceived() 在 Network 类和匿名内部类中都被覆盖,只是为了覆盖我的资产:

@Override
    public void onInvitationReceived(Invitation invitation) {
        Intent intent = Games.Invitations.getInvitationInboxIntent(game.getGoogleClient());
        game.startActivityForResult(intent, RC_INVITATION_INBOX);

        mIncomingInvitationId = invitation.getInvitationId();
        AlertDialog.Builder builder = new AlertDialog.Builder(game.getApplicationContext());
        builder.setMessage("Join Game?")
                .setTitle("Bit Game Invitation!");
        builder.setPositiveButton("Join", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                if(!game.getGoogleClient().isConnected()) {
                    game.getGoogleClient().connect();
                }
                // User clicked OK button
                Bundle am = RoomConfig.createAutoMatchCriteria(1, 3, 0);
                RoomConfig.Builder roomConfigBuilder = RoomConfig.builder(Network.getInstance());
                roomConfigBuilder.setMessageReceivedListener(Network.getInstance());
                roomConfigBuilder.setRoomStatusUpdateListener(Network.getInstance());
                roomConfigBuilder.setAutoMatchCriteria(am);
                roomConfigBuilder.setInvitationIdToAccept(mIncomingInvitationId);
                RoomConfig roomConfig = roomConfigBuilder.build();
                Games.RealTimeMultiplayer.join(game.getGoogleClient(), roomConfig);

                // prevent screen from sleeping during handshake
                game.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                dialog.dismiss();

                // go to game screen
                game.setScreen(new CharSelectScreen(game));
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // User cancelled the dialog
                dialog.dismiss();
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();

【问题讨论】:

  • "如果登录的玩家接受来自安卓状态栏通知区域的邀请,您的游戏应该接受邀请并直接进入游戏屏幕(跳过主菜单)。"正如您所看到的,这两种方法都进入了字符选择屏幕 (CharSelectScreen),但除了应用程序正在启动之外,它什么也没有出现。我需要在 onCreate 中指定一些东西吗?

标签: java android google-play-services google-play-games


【解决方案1】:

我解决了这个问题,简短的回答是我没有尽可能严格地遵循 Android Realtime Multiplayer 食谱(指南)。

指南要求轻松访问 Google Play 登录,或者在启动应用程序时自动登录,或者我想最好是一个登录按钮。当我添加这个时,我的回调 onConnected() 代码有效,邀请允许用户使用默认的等候室弹出窗口进入指定的游戏屏幕(实现显示为here)。我还在调试onInvitationReceived()回调,但是我怀疑当游戏打开时收到邀请时,游戏崩溃意味着我的实现有问题。

总而言之,我认为这对我来说有点误解,文档相当直观。感谢您的帮助,我希望这对未来的 Google Play 游戏服务开发者有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多