Я работал над приложением для Android, которое считывает данные из общедоступной электронной таблицы. Сначала приложение аутентифицирует пользователя с помощью Google Sign-In , а затем делает запрос на чтение из общедоступной электронной таблицы. Я следовал правилам Google Sheets - Android Quickstart .
Все работает отлично, кроме аутентификации пользователя, приложение запрашивает разрешения пользователя, даже если приложение не использует электронные таблицы пользователя. Он отправляет предупреждение о безопасности пользователю, разрешившему приложение.
MainActivity.java
private static final int RC_SIGN_IN = 101;
private GoogleSignInClient mGoogleSignInClient;
GoogleAccountCredential mCredential;
private static final String[] SCOPES = { SheetsScopes.SPREADSHEETS_READONLY };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GoogleSignInOptions gso = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes( new Scope(SheetsScopes.SPREADSHEETS_READONLY) )
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
mCredential = GoogleAccountCredential
.usingOAuth2(this, Arrays.asList(SCOPES))
.setBackOff(new ExponentialBackOff());
GoogleSignInAccount lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(this);
if (lastSignedInAccount == null){
signIn();
} else {
mCredential.setSelectedAccount(lastSignedInAccount.getAccount());
setNavHeaderOnSignIn(lastSignedInAccount);
}
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
mCredential.setSelectedAccount(account.getAccount());
} catch (ApiException e) {
e.printStackTrace();
}
}
Как я могу избежать запроса такого разрешения, даже если приложение не использует их. Или как сделать запросы на чтение анонимно с помощью Sheets API.