使用 Google Play 游戏接收成就时不显示弹出窗口

Posted

技术标签:

【中文标题】使用 Google Play 游戏接收成就时不显示弹出窗口【英文标题】:Pop-up not be displayed when receiving an achievement using Google Play Games 【发布时间】:2019-01-04 11:59:09 【问题描述】:

我发现了一堆有类似问题的帖子,但大多数都使用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,如果我确实需要你能告诉我为什么以及如何使用吗? 我们将不胜感激所有帮助!

【问题讨论】:

【参考方案1】:

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

我从this *** answer 将以下内容添加到我的OnConnected

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

它给出了 GoogleSignIn.getLastSignedInAccount(this)) 可能为空的 lint 警告,所以我只是将它包装在 if statement 列表中:

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

这可能不是一个很好的答案,但它对我有用,所以我希望你能发现它有用,祝你好运。

【讨论】:

我试过这个,还在我的主布局中添加了那个视图块gps_popup。我没有收到任何错误,但也没有看到任何弹出窗口。 @MattVine 我将代码从OnCreate 移至OnConnected,它运行得更好。我尝试在登录过程中将其移动到不同的位置,并通过登录和退出应用程序进行故障排除,直到它按预期运行并且 Google Play 游戏用户名会浮在视图上并消失。 我找不到OnConnected。在我的代码中将OnConnected 放在哪里? @MattVine 我相信我们使用不同的技术连接到 Google Play 游戏服务。我遵循了在 Github 上托管的 Google TypeANumber 教程,其中包括一个 OnConnected 函数。您还可以在 Github here 上查看我在遵循 Google 教程时创建的实现此修复的项目。【参考方案2】:

如果您正在测试游戏服务并且没有显示成就的弹出窗口,原因可能是您没有为该成就添加图标。我发现,弹出窗口仅针对 ICON 的成就显示

【讨论】:

我已经仔细检查了,我所有的成就在开发者控制台中都有图标。 @MattVine 你试过清除 Play Games Service 应用的缓存吗?

以上是关于使用 Google Play 游戏接收成就时不显示弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 游戏,未显示成就

Google Play 游戏服务:显示解锁成就

Google Play 游戏服务 - 隐藏/取消隐藏成就

Google Play 游戏服务成就活动立即结束

如何使用自定义语言的 Android Google Play 服务显示成就页面

Google Play 游戏服务成就加载