3

我正在尝试在Google Play Game Services我的应用程序的主菜单上实现和,我有一个 Google+ 登录按钮。当用户尝试登录时,他们会一直完成登录过程(超过 5 个屏幕),他们会到达我认为正在完成登录的地步,然后弹出以下错误。

dsf

这发生在我的测试手机上,我可以在我的 AVD 模拟器上重现它。这个错误显然有点模糊。我已经尝试了此处链接中的所有解决方案,但均未成功。

有人可以帮我吗?不确定您需要什么代码,但我在MainMenu下面发布了我的课程的相关片段。

MainMenu.class

public class MainMenu extends BaseGameActivity {

    DatabaseHelper dh;

    ImageView image;
    Button startBtn, highscoresBtn, aboutBtn, comingsoonBtn, biblestudyBtn, signOut;

    SignInButton sign_in_button;
    TextView title, subtitle;

    public static final String notice = "notice";

    GamesClient client;

    Context c;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainmenu);

        client = getGamesClient();
        client.connect();

        c = this;

        sign_in_button = (SignInButton)findViewById(R.id.sign_in_button);
        signOut = (Button)findViewById(R.id.sign_out_button); 
        startBtn = (Button)findViewById(R.id.startBtn);
        highscoresBtn = (Button)findViewById(R.id.highscoresBtn);
        aboutBtn = (Button)findViewById(R.id.aboutBtn);
        comingsoonBtn = (Button)findViewById(R.id.comingsoonBtn);
        biblestudyBtn = (Button)findViewById(R.id.biblestudyBtn);
        title = (TextView)findViewById(R.id.title);
        subtitle = (TextView)findViewById(R.id.subtitle);

        startBtn.setText(c.getResources().getString(R.string.startBtn));
        highscoresBtn.setText(c.getResources().getString(R.string.highscoresBtn));
        aboutBtn.setText(c.getResources().getString(R.string.aboutBtn));
        comingsoonBtn.setText(c.getResources().getString(R.string.comingsoonBtn));
        biblestudyBtn.setText(c.getResources().getString(R.string.biblestudyBtn));
        title.setText(c.getResources().getString(R.string.title));
        subtitle.setText(c.getResources().getString(R.string.subtitle));
        //sign_in_button.setText(c.getResources().getString(R.string.signin));
        signOut.setText(c.getResources().getString(R.string.signout));

        sign_in_button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // start the asynchronous sign-in flow
                beginUserInitiatedSignIn();
            }
        });

        signOut.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // sign-out
                signOut();

                // show sign-in button, hide the sign-out button
                findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
                findViewById(R.id.sign_out_button).setVisibility(View.GONE);
            }
        });
    }

    public void onSignInSucceeded() {
        // show sign-out button, hide the sign-in button
        findViewById(R.id.sign_in_button).setVisibility(View.GONE);
        findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);

        final Dialog dialog = new Dialog(c);
        dialog.setContentView(R.layout.importlayout);
        dialog.setTitle(R.string.importtitle);

        TextView question = (TextView)dialog.findViewById(R.id.question);       
        Button save = (Button)dialog.findViewById(R.id.save);
        Button scratch = (Button)dialog.findViewById(R.id.scratch);

        question.setText(c.getResources().getString(R.string.importquestion));
        save.setText(c.getResources().getString(R.string.savebtn));
        scratch.setText(c.getResources().getString(R.string.scratchbtn));

        save.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                //...
            }
        });

        scratch.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                dh.deleteAll();
                for(int i = 0; i < 15; i++) {
                    dh.insert(0, 0, "-");
                }
                dialog.dismiss();
                dh.closeDB();
            }
        });

        dialog.show();
    }

    public void onSignInFailed() {
        // sign in has failed. So show the user the sign-in button.
        findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
        findViewById(R.id.sign_out_button).setVisibility(View.GONE);

        // (add any code if needed)
    }
}

编辑

我试过的:

  • 确保 SHA1/证书指纹正确

编辑#2

刚刚注意到一件事。我是否需要单击“发布您的游戏”才能让所有这些开始工作?

另外,我需要先将 APK 作为草稿导出并上传到开发控制台吗?

在此处输入图像描述

4

4 回答 4

1

我认为 Google Play 自动选择的证书指纹不正确。尝试在 Google API 控制台上删除您的应用程序客户端 ID,取消链接您的应用程序,然后使用正确的证书指纹重新链接它。在 Eclipse 中导出应用程序时会显示正确的指纹。

于 2013-06-10T21:17:51.717 回答
1

Google Play 不会自动选择指纹。您在该窗口中看到的是一个示例指纹,旨在传达指纹的外观。您应该使用keytool命令找出自己的指纹,如下所示:

keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v

如果您的密钥是调试密钥,那么您的密钥名称通常是androiddebugkey.

于 2013-06-12T20:03:42.377 回答
0

在我意识到程序出了什么问题后,这对我来说似乎很明显,但请确保您要签名的帐户是列为开发人员的账户,或者列为测试中的测试人员的账户。在测试多人游戏时,其他玩家的 google plus 帐户也必须列为测试人员。

当您从开发者控制台的 Google Play 游戏服务中选择游戏时,测试会列在 6 个选项中。

于 2013-06-18T01:10:40.527 回答
0

如果您在调试模式下运行您的应用程序,即由调试证书而不是您的发布证书签名,请确保您还使用此 SHA1 配置了应用程序(您可以为相同的包名称添加第二个链接的应用程序)。

还要确保您的测试人员在测试人员列表中。

运行真正有用的“adb logcat”。

于 2013-06-14T20:45:25.380 回答