API Google Sheets требует разрешения пользователя на чтение / запись публичных таблиц в Android - PullRequest
0 голосов
/ 01 июня 2019

Я работал над приложением для Android, которое считывает данные из общедоступной электронной таблицы. Сначала приложение аутентифицирует пользователя с помощью Google Sign-In , а затем делает запрос на чтение из общедоступной электронной таблицы. Я следовал правилам Google Sheets - Android Quickstart .

Все работает отлично, кроме аутентификации пользователя, приложение запрашивает разрешения пользователя, даже если приложение не использует электронные таблицы пользователя. Он отправляет предупреждение о безопасности пользователю, разрешившему приложение.

Imgur

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...