[英]How to properly use Google Drive Rest API?
我有一個應用程序,我想將SQLite數據庫文件上傳到用戶的谷歌驅動器帳戶。
由於Google Android API將停止工作,我想實現REST API,實現REST API需要身份驗證。 我正在使用Google登錄,但REST API需要某種類型的訪問令牌。 怎么做到的?
我在開發者控制台中創建了一個帳戶,啟用了Drive API,並為驅動器/身份驗證添加了Scope。
我使用官方文檔https://developers.google.com/identity/sign-in/android/sign-in實現了登錄功能
使用此代碼,我可以獲取用戶的電子郵件以及創建DriveService,
GoogleSignInOptions googleSignInOptions = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(DriveScopes.DRIVE))
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);
Intent googleSignInIntent = googleSignInClient.getSignInIntent();
startActivityForResult(googleSignInIntent, REQUEST_CODE_SIGN_IN);
在活動結果中,我可以使用我創建DriveServiceHelper的帳戶獲取用戶帳戶
mDriveServiceHelper = new DriveServiceHelper(getGoogleDriveService(getApplicationContext(), googleSignInAccount, "appName"));
現在問題是當我嘗試創建文件夾時它顯示了一個關於(UserRecoverableAuthIOException)的錯誤,
請參閱我使用其創建文件夾的代碼
public Task<GoogleDriveFileHolder> createFolder(final String folderName, @Nullable final String folderId) {
return Tasks.call(mExecutor, new Callable<GoogleDriveFileHolder>() {
@Override
public GoogleDriveFileHolder call() {
GoogleDriveFileHolder googleDriveFileHolder = new GoogleDriveFileHolder();
List<String> root;
if (folderId == null) {
root = Collections.singletonList("root");
} else {
root = Collections.singletonList(folderId);
}
File metadata = new File()
.setParents(root)
.setMimeType(DriveFolder.MIME_TYPE)
.setName(folderName);
File googleFile = null;
googleFile = mDriveService.files().create(metadata).execute();
googleDriveFileHolder.setId(googleFile.getId());
return googleDriveFileHolder;
}
});
}
我嘗試使用StackOverflow中提供的各種討論線程來解決錯誤,但是沒有人能夠工作,有人能引導我完成這個嗎?
給定android.accounts.Account
,您可以使用AccountManager.blockingGetAuthToken
,在GoogleCredential
設置此標記,然后將其作為HttpRequestInitializer
傳遞給Drive.Builder
。
String token = AccountManager.get(context)
.blockingGetAuthToken(<android.accounts.Account>, "oauth2:" + DriveScopes.DRIVE, false);
GoogleCredential credential = new GoogleCredential().setAccessToken(token);
Drive service = new Drive.Builder(new NetHttpTransport(), new JacksonFactory(), credential)
.setApplicationName("app name")
.build();
最終此令牌將過期,此時您需要調用AccountManager.invalidateAuthToken
並獲取一個新令牌
如果您已包含play-services-auth
庫,則可以傳遞此憑據:
GoogleAccountCredential credential = GoogleAccountCredential
.usingOAuth2(context, Collections.singleton(DriveScopes.DRIVE))
.setSelectedAccount(googleAccount.getAccount());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.