我如何获得 google drive rest api 调用的访问令牌?

How can i get access token for google drive rest api call?

我想传递访问令牌以从 google 驱动器获取文件列表。

我做了什么:

  1. 将应用程序注册到 Google 开发控制台。

  2. 我有基于 OAuth 2.0 的客户端 ID

我想做什么:

  1. https://www.googleapis.com/drive/v2/files

  2. 致电HttpCall
  3. 我想像这样在 header 中设置访问令牌:

    DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost("https://www.googleapis.com/drive/v2/files"); post.addHeader("Content-Type", "application/json"); post.addHeader("Authorization","Bearer XXXXXXXXXXXXXXXXXXXXXXXXX");

  4. 如何使用 OAuth2.0 客户端 ID

  5. 获取授权访问令牌

您应该查看 Drive for Android 文档。

这让整个工作变得简单多了。例如

创建文件:

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    IntentSender intentSender = Drive.DriveApi
            .newOpenFileActivityBuilder()
            .setMimeType(new String[] { "text/plain", "text/html" })
            .build(getGoogleApiClient());
    try {
        startIntentSenderForResult(
                intentSender, REQUEST_CODE_OPENER, null, 0, 0, 0);
    } catch (SendIntentException e) {
        Log.w(TAG, "Unable to send intent", e);
    }
}

列出文件夹中的文件

列出文件夹中的所有文件

/**
 * An activity that illustrates how to list files in a folder.
 */
public class ListFilesInFolderActivity extends BaseDemoActivity implements
        ResultCallback {

    private static DriveId sFolderId = DriveId.decodeFromString("DriveId:0B2EEtIjPUdX6MERsWlYxN3J6RU0");

    private ListView mResultsListView;
    private ResultsAdapter mResultsAdapter;

    @Override
    public void onConnected(Bundle connectionHint) {
        super.onCreate(connectionHint);
        setContentView(R.layout.activity_listfiles);
        mResultsListView = (ListView) findViewById(R.id.listViewResults);
        mResultsAdapter = new ResultsAdapter(this);
        mResultsListView.setAdapter(mResultsAdapter);
        DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), sFolderId);
        folder.listChildren(getGoogleApiClient()).setResultCallback(childrenRetrievedCallback);
    }

    ResultCallback<MetadataBufferResult> childrenRetrievedCallback = new
            ResultCallback<MetadataBufferResult>() {
        @Override
        public void onResult(MetadataBufferResult result) {
            if (!result.getStatus().isSuccess()) {
                showMessage("Problem while retrieving files");
                return;
            }
            mResultsAdapter.clear();
            mResultsAdapter.append(result.getMetadataBuffer());
            showMessage("Successfully listed files.");
        }
    }
}

查询文件

要查询文件说 "HelloWorld.java":

Query query = new Query.Builder()
    .addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java"))
    .build();
Drive.DriveApi.query(googleApiClient, query);

有关查询的更多详细信息please look at this part of documentation

如果您使用 GDAA 中可用的范围进行调用,那将是您最好的选择。

否则您可以使用 Google Drive Java 客户端库。在这种情况下,您可以使用 GoogleAccountCredential 进行身份验证,它将包含访问令牌,但您不需要直接使用它。请参阅示例 here