大家好。
我正在努力在我正在开发的游戏中实现成就。
我已经在google控制台上设置了所有内容,获得了应用程序id,并在清单中输入了以下内容
<meta-data
android:name="com.google.android.gms.games.APP_ID"
android:value="@string/app_id" />
并编写了以下方法
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需要细石岩函数。
有谁知道会有什么问题吗?
提前谢谢。
发布于 2017-12-13 15:05:40
我觉得你应该查查:
GoogleSignIn.hasPermissions(account, Games.SCOPE_GAMES_LITE).
如果该帐户中没有权限,则应使用
GoogleSignIn.getClient(this, gso).silentSignIn or GoogleSignIn.getClient(this, gso).getSignInIntent()
使用startActivityForResult接收具有GAMES_LITE作用域的帐户。
GoogleSignIn.hasPermissions还为空帐户返回false,这也可能是getLastSignedInAccount的结果。
示例:
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();
}
});
}
发布于 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}"
发布于 2018-03-12 10:10:24
当我展示一个领导板时,我也遇到了同样的问题,发现Oleh的解决方案有助于解决这个问题。请求正确的范围是关键。我在onCreate中构建onCreate客户机的代码是:
// 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);
稍后,当显示主板时,我会这样做:
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);
}
我的活动还为登录过程实现了两个侦听器:
public final class HomeActivity implements
OnSuccessListener<Intent>,
OnFailureListener
(来自包com.google.android.gms.tasks)
最后,在onSuccess中,我可以显示主板
public void onSuccess(Intent intent) {
startActivityForResult(intent, RC_LEADERBOARD_UI);
}
在我的例子中,onFailure只是向用户显示一个错误。但是一定要同时拥有两个侦听器,这样在调试时就不会遗漏任何有用的细节。
https://stackoverflow.com/questions/47594187
复制相似问题