我正在尝试为Android游戏设置Google登录。登录工作正常,我可以选择一个Google帐户并登录。但是在调用页首横幅时,它显示了一个错误:当前登录的Google帐户中缺少Games.SCOPE_GAMES_LITE范围。 因此,我一直在尝试在登录时请求此范围-但是,如果我这样做了,则以前显示的Google登录对话框将不再显示。它没有给我任何错误,只是没有显示。 (同样,如果我尝试将DEFAULT_SIGN_IN更改为DEFAULT_GAMES_SIGN_IN。)有什么想法吗?以前曾在这里提出过类似的问题,但到目前为止还没有好的答案...
public class SignInFragment extends Fragment {
private GoogleSignInOptions options;
private GoogleSignInClient client;
SignInButton signInButton;
private Intent signInIntent;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View signInFragment = inflater.inflate(R.layout.fragment_signin, container, false);
options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestScopes(Games.SCOPE_GAMES_LITE)
.build();
client = GoogleSignIn.getClient(this.getActivity(), options);
signInButton = (SignInButton) signInFragment.findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_WIDE);
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
return signInFragment;
}
private void signIn() {
signInIntent = client.getSignInIntent();
startActivityForResult(signInIntent, StaticResources.RC);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == StaticResources.RC) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
updateUI(account);
} catch (ApiException e) {
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
updateUI(null);
}
}
private void updateUI(GoogleSignInAccount account){
//...
}
}
这是我得到有关缺少范围的错误的地方:
private void showScores(){
// If user did sign in previously, this returns the user's Google account
if (StaticResources.thisAccount != null){
Games.getLeaderboardsClient(this.getActivity(),
GoogleSignIn.getLastSignedInAccount(this.getContext()))
.getLeaderboardIntent(getString(R.string.leaderboard_highscore))
.addOnSuccessListener(new OnSuccessListener<Intent>() {
@Override
public void onSuccess(Intent intent) {
startActivityForResult(intent, StaticResources.RC);
}
});
}
else{ //...
答案 0 :(得分:1)
我发现了问题... gradle文件很好,但是清单文件中缺少此文件:
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="@string/app_id" />
登录Google Play控制台->游戏服务->“您的游戏”->“游戏详细信息”时,您可以在标题(即您的应用名称)的正下方找到您的应用ID。