Tôi đang phát triển một ứng dụng truy cập API Google (bắt đầu bằng API lịch) bằng OAuth2 và thư viện ứng dụng khách Google (trên Appengine và GWT BTW).Cách nhận mã thông báo ngoại tuyến và mã thông báo làm mới cũng như tự động làm mới quyền truy cập vào API Google
Tôi đã triển khai servlet OAuth2Call
quay lại của mình, mở rộng Google AbstractAppEngineAuthorizationCodeCallbackServlet
.
Tôi có nó làm việc, tôi được tiếp cận và có thể nhìn vào lịch vv, nhưng có hai vấn đề:
1) Tôi không nhận được một mã thông báo làm mới, bất chấp yêu cầu một cách rõ ràng truy cập ẩn:
public static GoogleAuthorizationCodeFlow newFlow(String scope) throws IOException {
GoogleAuthorizationCodeFlow.Builder builder = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT,
JSON_FACTORY,
getClientSecrets(),
Collections.singleton(scope));
builder.setCredentialStore(new AppEngineCredentialStore()).setAccessType("offline");
return builder.build();
}
2) Tôi không thể xem cách đặt chức năng làm mới tự động. Những trang này mô tả các phương pháp:
Nhưng tôi không thể nhìn thấy nơi để thêm người nghe làm mới. Không có phương pháp như vậy trong lớp GoogleAuthorizationCodeFlow.Builder
, không giống như các Credential.Builder
lớp
EDIT Sau khi gỡ lỗi mã hơn, khi các chứng chỉ trở lại (trong phương pháp onSuccess()
) nó dường như có một bộ RefreshListener
đã ..... vì vậy có lẽ đó là của họ theo mặc định, và vấn đề duy nhất của tôi là tôi không nhận được một refresh_token
, mặc dù yêu cầu cho nó.
Có thể bạn cũng cần xem lại cài đặt trong Bảng điều khiển API của Google?
Cảm ơn nhận xét, tôi sẽ kiểm tra theo các dòng này. Tại thời điểm này, tôi thực hiện thu hồi mã thông báo rõ ràng và sau đó yêu cầu lại và tôi luôn đi qua màn hình chấp nhận rõ ràng cho người dùng - nhưng vẫn không nhận được tệp refresh_token. –
vlatko, tôi đã làm mọi thứ bạn nói * ngoại trừ * lực lượng nhắc nhở, và dường như đã sửa nó! Vì vậy, câu trả lời của bạn đã được đánh giá cao! Đây có phải là một lỗi, hoặc chỉ là một thiếu sót rõ ràng từ các tài liệu (quá rộng ...)? –