Android calendar api 403 forbidden Insufficient permission错误

标签 android google-calendar-api android-calendar

我正在使用 google calendar api 开发日历应用程序。我可以查询添加到谷歌日历中的事件列表,但在为谷歌日历创建事件时出现错误。以下是报错

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
   "errors" : [ {
     "domain" : "global",
     "message" : "Insufficient Permission",
     "reason" : "insufficientPermissions"
   } ],
   "message" : "Insufficient Permission"
 }

这是我的代码:

private void addEvent(String desc, String eventtime, Date date) {
    Event event = new Event()
            .setSummary(desc)
            .setDescription(desc);

    java.util.Calendar cal = java.util.Calendar.getInstance();
    TimeZone tz = cal.getTimeZone();
    DateTime startDateTime = new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(date)+"T09:00:00-07:00");
    EventDateTime start = new EventDateTime()
            .setDateTime(startDateTime)
            .setTimeZone(String.valueOf(tz));
    event.setStart(start);

    DateTime endDateTime = new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(date)+"T17:00:00-07:00");
    EventDateTime end = new EventDateTime()
            .setDateTime(endDateTime)
            .setTimeZone(String.valueOf(tz));
    event.setEnd(end);

    String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=2"};
    event.setRecurrence(Arrays.asList(recurrence));

    EventAttendee[] attendees = new EventAttendee[] {
            new EventAttendee().setEmail("someone@gmail.com"),
            new EventAttendee().setEmail("someother@gmail.com"),
    };
    event.setAttendees(Arrays.asList(attendees));

    EventReminder[] reminderOverrides = new EventReminder[] {
            new EventReminder().setMethod("email").setMinutes(24 * 60),
            new EventReminder().setMethod("popup").setMinutes(10),
    };
    Event.Reminders reminders = new Event.Reminders()
            .setUseDefault(false)
            .setOverrides(Arrays.asList(reminderOverrides));
    event.setReminders(reminders);

    new AddEventTask(event).execute();

}

异步类

private class AddEventTask extends AsyncTask<Void, Void, Event>{

    private com.google.api.services.calendar.Calendar mService = null;
    private Exception mLastError = null;
    private Event event;

    public AddEventTask(Event event) {
        HttpTransport transport = AndroidHttp.newCompatibleTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        mService = new com.google.api.services.calendar.Calendar.Builder(
                transport, jsonFactory, mCredential)
                .setApplicationName("Google Calendar API Android Quickstart")
                .build();
        this.event = event;
    }

    @Override
    protected Event doInBackground(Void... voids) {
        try {
            return addSingleEvent();
        } catch (Exception e) {
            mLastError = e;
            cancel(true);
            return null;
        }
    }

    private Event addSingleEvent() {

        String calendarId = "primary";
        try {
            event = mService.events().insert(calendarId, event).execute();
            System.out.printf("Event created: %s\n", event.getHtmlLink());
            return event;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }

    @Override
    protected void onPreExecute() {
        mOutputText.setText("");
        mProgress.show();
    }

    @Override
    protected void onPostExecute(Event s) {
        super.onPostExecute(s);
        mProgress.hide();
        if (s == null ) {
            mOutputText.setText("No results returned.");
        } else {
            System.out.printf("Event created: %s\n", event.getHtmlLink());
            mOutputText.setText(s.getHtmlLink());
        }
    }

    @Override
    protected void onCancelled() {
        mProgress.hide();
        if (mLastError != null) {
            if (mLastError instanceof GooglePlayServicesAvailabilityIOException) {
                showGooglePlayServicesAvailabilityErrorDialog(
                        ((GooglePlayServicesAvailabilityIOException) mLastError)
                                .getConnectionStatusCode());
            } else if (mLastError instanceof UserRecoverableAuthIOException) {
                startActivityForResult(
                        ((UserRecoverableAuthIOException) mLastError).getIntent(),
                        CalendarActivity.REQUEST_AUTHORIZATION);
            } else {
                mOutputText.setText("The following error occurred:\n"
                        + mLastError.getMessage());
            }
        } else {
            mOutputText.setText("Request cancelled.");
        }
    }

}

需要帮助来解决这个问题。提前致谢。

最佳答案

这是因为SCOPES权限不足。

添加以下代码以授予权限:

private static final String[] SCOPES = { CalendarScopes.CALENDAR_READONLY ,CalendarScopes.CALENDAR};

关于Android calendar api 403 forbidden Insufficient permission错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36801840/

相关文章:

Android FrameLayouts 并排与独立的内部滚动

android - 如何在没有外部应用程序的情况下打开/显示 pdf?

javascript - 使用 Google Calendar API 创建 Zoom session 时出错

android - 在 Android 中安排 Activity

android - 如何在android中按日期范围或月份获取日历事件

android 日历事件每年重复重复规则

android - Android HTTP POST 的基本身份验证

android - 如何控制Android Studio中的 "call requires permission..."错误?

google-api - Google Meet 有直接的 API 吗?

android - 使用 Android 的 Google Calendar API 插入事件