Android:Google 登录 - 'DEFAULT_SIGN_IN' 和 'DEFAULT_GAMES_SIGN_IN' 之间的区别
Android: Google Sign In - difference between 'DEFAULT_SIGN_IN' and 'DEFAULT_GAMES_SIGN_IN'
我正在尝试在 AndroidStudio 中实现 Google 登录到我的应用程序。我用它工作:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();
我已从 API 控制台将我的客户端 ID 正确设置为 Web 应用程序客户端 ID,并且 SHA1 绝对设置正确。
当我改成这个时(改用 DEFAULT_GAMES_SIGN_IN):
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();
我收到消息为空且状态代码为 12501 的错误。
DEFAULT_GAMES_SIGN_IN 和 DEFAULT_SIGN_IN 有什么区别?我需要为游戏登录做一些不同的事情吗?
这是我的全部代码:
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
public class MainActivity extends AppCompatActivity {
GoogleSignInClient mGoogleSignInClient;
String clientID;
int RC_SIGN_IN = 9001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clientID = getString(R.string.client_id);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
signInSilently();
}
private void signInSilently(){
mGoogleSignInClient.silentSignIn().addOnCompleteListener(this, new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if(task.isSuccessful()){
GoogleSignInAccount signedInAccount = task.getResult();
setText(signedInAccount.getEmail(), signedInAccount.getDisplayName());
}else{
interactiveSignIn();
}
}
});
}
private void interactiveSignIn(){
Intent i = mGoogleSignInClient.getSignInIntent();
startActivityForResult(i, 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()){
GoogleSignInAccount signedInAccount = result.getSignInAccount();
setText(signedInAccount.getEmail(), signedInAccount.getDisplayName());
}else{
String message = "ERROR: " + result.getStatus().getStatusMessage() + " - CODE: " + result.getStatus().getStatusCode();
showAlert(message);
}
}
}
void showAlert(String message){
new AlertDialog.Builder(this).setMessage(message).setNeutralButton("OK", null).show();
}
void setText(String email, String name){
TextView tv = (TextView) findViewById(R.id.Test_TextView);
tv.setText("EMAIL: " + email + " NAME: " + name);
}
}
一个区别是 DEFAULT_GAMES_SIGN_IN 请求 Games.SCOPE_GAMES_LITE 范围。
这是在您的应用程序中使用 Google Play 游戏 api 所必需的。
(注意:我不是 100% 确定它是精简版范围。它可能会请求 Games.SCOPE_GAMES。但是,文档中 SCOPE_GAMES 上的 search已弃用的接口,其新的替代品都需要 SCOPE_GAMES_LITE)
但是,要登录 Google Play 游戏,您的应用必须设置 Google Play 游戏服务。
参考官方guide如何操作。
第一次请仔细按照说明操作,任何一个小错误都会导致您无法登录。
设置完成后,您可能需要查看特定于游戏的登录 guide。
我正在尝试在 AndroidStudio 中实现 Google 登录到我的应用程序。我用它工作:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();
我已从 API 控制台将我的客户端 ID 正确设置为 Web 应用程序客户端 ID,并且 SHA1 绝对设置正确。
当我改成这个时(改用 DEFAULT_GAMES_SIGN_IN):
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();
我收到消息为空且状态代码为 12501 的错误。
DEFAULT_GAMES_SIGN_IN 和 DEFAULT_SIGN_IN 有什么区别?我需要为游戏登录做一些不同的事情吗?
这是我的全部代码:
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
public class MainActivity extends AppCompatActivity {
GoogleSignInClient mGoogleSignInClient;
String clientID;
int RC_SIGN_IN = 9001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clientID = getString(R.string.client_id);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
signInSilently();
}
private void signInSilently(){
mGoogleSignInClient.silentSignIn().addOnCompleteListener(this, new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if(task.isSuccessful()){
GoogleSignInAccount signedInAccount = task.getResult();
setText(signedInAccount.getEmail(), signedInAccount.getDisplayName());
}else{
interactiveSignIn();
}
}
});
}
private void interactiveSignIn(){
Intent i = mGoogleSignInClient.getSignInIntent();
startActivityForResult(i, 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()){
GoogleSignInAccount signedInAccount = result.getSignInAccount();
setText(signedInAccount.getEmail(), signedInAccount.getDisplayName());
}else{
String message = "ERROR: " + result.getStatus().getStatusMessage() + " - CODE: " + result.getStatus().getStatusCode();
showAlert(message);
}
}
}
void showAlert(String message){
new AlertDialog.Builder(this).setMessage(message).setNeutralButton("OK", null).show();
}
void setText(String email, String name){
TextView tv = (TextView) findViewById(R.id.Test_TextView);
tv.setText("EMAIL: " + email + " NAME: " + name);
}
}
一个区别是 DEFAULT_GAMES_SIGN_IN 请求 Games.SCOPE_GAMES_LITE 范围。
这是在您的应用程序中使用 Google Play 游戏 api 所必需的。
(注意:我不是 100% 确定它是精简版范围。它可能会请求 Games.SCOPE_GAMES。但是,文档中 SCOPE_GAMES 上的 search已弃用的接口,其新的替代品都需要 SCOPE_GAMES_LITE)
但是,要登录 Google Play 游戏,您的应用必须设置 Google Play 游戏服务。
参考官方guide如何操作。
第一次请仔细按照说明操作,任何一个小错误都会导致您无法登录。
设置完成后,您可能需要查看特定于游戏的登录 guide。