首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谷歌玩小游戏

谷歌玩小游戏
EN

Stack Overflow用户
提问于 2017-12-01 13:11:07
回答 3查看 2K关注 0票数 0

大家好。

我正在努力在我正在开发的游戏中实现成就。

我已经在google控制台上设置了所有内容,获得了应用程序id,并在清单中输入了以下内容

代码语言:javascript
运行
复制
    <meta-data
        android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />

并编写了以下方法

代码语言:javascript
运行
复制
        GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
        int temp = googleApiAvailability.isGooglePlayServicesAvailable(this);
        if ( temp != 0)
            return;

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
                .requestEmail()
                .build();

        GoogleSignIn.getClient(this, gso);

        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
        PlayersClient player = Games.getPlayersClient(this, account);

当我运行它时,我得到了我的帐户,但是当它运行Games.getPlayersClient(this, account);时,我得到了以下错误:

java.lang.IllegalStateException:游戏API需要细石岩函数。

有谁知道会有什么问题吗?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-13 15:05:40

我觉得你应该查查:

代码语言:javascript
运行
复制
GoogleSignIn.hasPermissions(account, Games.SCOPE_GAMES_LITE).

如果该帐户中没有权限,则应使用

代码语言:javascript
运行
复制
GoogleSignIn.getClient(this, gso).silentSignIn or GoogleSignIn.getClient(this, gso).getSignInIntent() 

使用startActivityForResult接收具有GAMES_LITE作用域的帐户。

GoogleSignIn.hasPermissions还为空帐户返回false,这也可能是getLastSignedInAccount的结果。

示例:

代码语言:javascript
运行
复制
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);

if (GoogleSignIn.hasPermissions(account, Games.SCOPE_GAMES_LITE)) {
    onSignIn(account);
} else {
    signInClient
      .silentSignIn()
      .addOnCompleteListener(
          this,
          task -> {
            if (task.isSuccessful()) {
              onSignIn(task.getResult());
            } else {
              resetSignedIn();
            }
          });
}
票数 2
EN

Stack Overflow用户

发布于 2017-12-02 15:04:38

您是否正确地在清单中添加了对Google服务的依赖?在“常见错误”部分这里

"4.在为Android开发时,请将Play Games SDK作为库项目,而不是作为独立的JAR,确保在Android项目中将Google服务SDK作为库项目引用,否则,当应用程序无法找到Google服务资源时,这可能会导致错误。要了解如何设置您的Android项目来使用Google服务,请参见建立Google服务。“

还有,你的舱单里有吗?

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

您的gradle文件依赖项中有吗?

compile "com.google.android.gms:play-services-games:${gms_library_version}" compile "com.google.android.gms:play-services-auth:${gms_library_version}"

票数 0
EN

Stack Overflow用户

发布于 2018-03-12 10:10:24

当我展示一个领导板时,我也遇到了同样的问题,发现Oleh的解决方案有助于解决这个问题。请求正确的范围是关键。我在onCreate中构建onCreate客户机的代码是:

代码语言:javascript
运行
复制
// Build a GoogleSignInClient with the options specified by gso.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(clientId)
            .requestScopes(Games.SCOPE_GAMES_LITE)
            .build();
mGoogleSignInClient = GoogleSignIn.getClient(HomeActivity.this, gso);

稍后,当显示主板时,我会这样做:

代码语言:javascript
运行
复制
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (null != account) {
    // check permissions, show Leaderboard when allowed to
    boolean hasGamesLitePermissions = GoogleSignIn.hasPermissions(account, Games.SCOPE_GAMES_LITE);
    if (hasGamesLitePermissions) {
        Games.getLeaderboardsClient(this, account)
            .getAllLeaderboardsIntent()
            .addOnSuccessListener(this)
            .addOnFailureListener(this);
}

我的活动还为登录过程实现了两个侦听器:

代码语言:javascript
运行
复制
public final class HomeActivity implements
    OnSuccessListener<Intent>,
    OnFailureListener

(来自包com.google.android.gms.tasks)

最后,在onSuccess中,我可以显示主板

代码语言:javascript
运行
复制
public void onSuccess(Intent intent) {
    startActivityForResult(intent, RC_LEADERBOARD_UI);
}

在我的例子中,onFailure只是向用户显示一个错误。但是一定要同时拥有两个侦听器,这样在调试时就不会遗漏任何有用的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47594187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档