使用Google Play游戏获得成就时不会显示弹出窗口

时间:2018-07-27 11:02:22

标签: android google-play-games google-api-client

我发现了很多类似问题的帖子,但是大多数都在使用BaseGameUtilsGoogleApiClient,而我没有。 一个建议的答案是添加Games.setViewForPopups(getApiClient(), findViewById(R.id.gps_popup));,除非我有GoogleApiClient,否则我无法做到。

成就代码:

public void achieve(String achievement) {
    Games.getAchievementsClient(this, signedInAccount).unlock(achievement);
}

public void increment(String achievement, int i) {
    Games.getAchievementsClient(this, signedInAccount).increment(achievement, i);
}

登录代码:

@Override
protected void onCreate(Bundle _savedInstanceState) {
    ...
    signInSilently();
}

private void signInSilently() {
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    signInClient.silentSignIn().addOnCompleteListener(this,
            new OnCompleteListener<GoogleSignInAccount>() {
                @Override
                public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                    if (task.isSuccessful()) {
                        signedInAccount = task.getResult();
                        findViewById(R.id.achievements_btn).setVisibility(View.VISIBLE);
                    } else {
                        startSignInIntent();
                    }
                }
            });
}

private void startSignInIntent() {
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
            GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    Intent intent = signInClient.getSignInIntent();
    startActivityForResult(intent, RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            signedInAccount = result.getSignInAccount();
            findViewById(R.id.achievements_btn).setVisibility(View.VISIBLE);
            Toast.makeText(getApplicationContext(), "Signed In", Toast.LENGTH_SHORT).show();
        } else {
            String message = result.getStatus().getStatusMessage();
            if (message == null || message.isEmpty()) {
                message = "Error";
            }
            Toast.makeText(getApplicationContext(), "Sign In Failed, please check internet connection and restart the app to use achievements.", Toast.LENGTH_LONG).show();
            cancelledSignIn = true;
        }
    }
}


private void showAchievements() {
    Games.getAchievementsClient(this, signedInAccount)
            .getAchievementsIntent()
            .addOnSuccessListener(new OnSuccessListener<Intent>() {
                @Override
                public void onSuccess(Intent intent) {
                    startActivityForResult(intent, RC_ACHIEVEMENT_UI);
                }
            });
}

不知道该怎么办,除了弹出窗口永不显示之外,所有这些都工作正常。我从不需要使用GoogleApiClient,如果我确实需要您告诉我原因和方式? 所有帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,也没有使用BaseGameUtilsGoogleApiClient

我将以下内容从this StackOverflow answer添加到了OnConnected

GamesClient gamesClient = Games.getGamesClient(MainActivity.this, 
GoogleSignIn.getLastSignedInAccount(context));
gamesClient.setViewForPopups(findViewById(R.id.gps_popup));

它给出了一个不起眼的警告,GoogleSignIn.getLastSignedInAccount(this))可能为空,因此我将其包装在if statement列表中,

if(GoogleSignIn.getLastSignedInAccount(this) != null){
GamesClient gamesClient = Games.getGamesClient(MainActivity.this, 
GoogleSignIn.getLastSignedInAccount(context));
gamesClient.setViewForPopups(findViewById(R.id.gps_popup));
}

这可能不是一个很好的答案,但是对我有用,所以我希望您能找到有用的方法,祝您好运。

答案 1 :(得分:1)

如果您正在测试游戏服务,而弹出窗口未显示成就,则原因可能是您尚未为该成就添加ICON。我发现,弹出窗口仅显示ICON的成就