Таблица Google создает новый лист с разрешением для всех пользователей, у которых есть ссылка

Я попытался использовать API таблиц Google v4, чтобы создать новый лист. Создаю успешно. Однако я обнаружил, что лист настраивается, поскольку я единственный, к кому есть доступ. Моя цель - разрешить пользователям, имеющим ссылку url, получить доступ к листу в запросе Java.

Я попытался установить для google credidential значение null при создании электронной таблицы, но он использовал as для создания электронной таблицы на диске. Таким образом, это не работает. Я просматриваю его библиотечный класс и api, но я не могу найти ничего, связанного с разрешением.

Я не уверен, что способ создания электронной таблицы находится на правильном пути. Вот мой код:

public class CreateSpreadSheetTask extends AsyncTask<Void, Void, Void> {
    private com.google.api.services.sheets.v4.Sheets mService = null;
    private Exception mLastError = null;
    private String title = null;
    private CreateSpreadsheetListener listener = null;

    public CreateSpreadSheetTask(GoogleAccountCredential credential, String title, CreateSpreadsheetListener listener) {
        HttpTransport transport = AndroidHttp.newCompatibleTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        mService = new Sheets.Builder(
                transport, jsonFactory, credential)
                .setApplicationName("Google Sheets API Android Quickstart")
                .build();
        this.title = title;
        this.listener = listener;
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            this.listener.onRecvCreateSpreadsheet(getSpreadsheetFromApi());
        } catch (Exception e) {
            e.printStackTrace();
            mLastError = e;
            cancel(true);
        }
        return null;
    }

    private Spreadsheet getSpreadsheetFromApi() throws IOException {
        Spreadsheet spreadsheet = new Spreadsheet();
        SpreadsheetProperties properties = new SpreadsheetProperties();
        properties.setTitle(this.title);
        spreadsheet.setProperties(properties);
        Sheets.Spreadsheets.Create request = mService.spreadsheets().create(spreadsheet);
        return request.execute();
    }
}

person CbL    schedule 21.07.2018    source источник
comment
Используйте Drive REST API, чтобы поделиться документом / сделать его общедоступным. Идентификатор файла для Диска совпадает с spreadsheetId, который API Таблиц дает вам в ответе от Create.   -  person tehhowch    schedule 21.07.2018


Ответы (1)


Как сказал @tehhowch, разрешение должно обрабатываться через Drive API. Вот просто обновите ответ на это.

private void updateProperty(com.google.api.services.drive.Drive driveService, String fileId, String email) throws IOException {
    BatchRequest batch = driveService.batch();
    Permission clientPermission = new Permission();
    clientPermission.setEmailAddress(email);
    clientPermission.setRole("writer");
    clientPermission.setType("user");
    driveService.permissions().create(fileId, clientPermission)
            .setFields("id")
            .setSendNotificationEmail(true)
            .queue(batch, new JsonBatchCallback() {
                @Override
                public void onSuccess(Object o, HttpHeaders responseHeaders) throws IOException {
                    Log.e("permissione success", String.valueOf(o));
                    listener.onRecvShareSpreadsheet(true);
                }

                @Override
                public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws IOException {
                    Log.e("permissione error", e.getMessage());
                    listener.onRecvShareSpreadsheet(false);
                }
            });
    batch.execute();
}

ref: разрешение API Google

person CbL    schedule 23.07.2018