簡體   English   中英

如何正確使用Google Drive Rest API?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM