używam api google calendar, aby uzyskać wydarzenia z kalendarza publicznego. W konsoli programisty Google I stworzyliśmy klucz konta usługi (json), który używam do Setup GoogleCredential w android kod w następujący sposób:api google kalendarz Google nie działa, gdy w wersji
AssetManager am = getAssets();
InputStream inputStream = am.open("key-file-name.json");
GoogleCredential credential = GoogleCredential.fromStream(inputStream);
credential =credential.createScoped(Arrays.asList("https://www.googleapis.com/auth/calendar.readonly"));
Następnie Używam tego GoogleCredential aby uzyskać obiekt kalendarza
Calendar client = new Calendar.Builder(AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
credential).setApplicationName("someAppName").build();
Potem dostać następne 5 zdarzeń z tego kalendarza
com.google.api.services.calendar.model.Events nextEvent =
client.events().list("[email protected]")
.setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault()))
.setMaxResults(5)
.setOrderBy("startTime")
.setSingleEvents(true)
.setShowDeleted(false)
.execute();
Chociaż ten kod działa poprawnie podczas debugowania podczas pracy w Androidzie studio, kiedy kompiluję do wydania (podpis z plikiem magazynu kluczy), to nie działa. To po prostu zwraca następujący wyjątek:
com.google.aacbc: 404 Not Found 3097-3187/com.news.apoelnews W/System.err: Nie znaleziono 3097-3187/com.news.apoelnews W. /System.err:
na com.google.aacdacb (Unknown Source)
Proszę o pomoc!
UPDATE I dodano zastosowanie android klucza API w kodu w następujący sposób:
com.google.api.services.calendar.model.Events nextEvent =
client.events().list("[email protected]")
.setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault()))
.setMaxResults(5)
.setOrderBy("startTime")
.setSingleEvents(true)
.setShowDeleted(false)
.setKey("api-key-string_from_developer_console"))
.execute();
To powoduje następujące wyjątki:
W/System.err: com .google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden W/System.err: "code": 403, W/System.err: "errors": [{ W/System.err: "domain" : "usageLimits", W/System.err:
"message" : „Istnieje ograniczenie per-IP lub per-Referer skonfigurowany na klucz API i żądanie nie pasuje do tych ograniczeń
Należy pamiętać, że klucze API są tworzone przy użyciu debugowania i wydania SHA-1.
Ponieważ używasz Konta serwisowe, używasz kalendarz do pracy (Google Apps for Work)? – adjuremods
Nie, ja nie .......................... – Louis
Dlaczego warto korzystać z kont usług? Z tego co wiem, możesz używać kont usług, jeśli używasz Google Apps for Work ([delegowanie uprawnień do całej domeny] (https://developers.google.com/google-apps/calendar/concepts/domain#accessing_domain_calendars_as_an_app)). – adjuremods