使用谷歌选择器打开特定的MimeTypes

时间:2013-07-27 19:31:00

标签: google-drive-api google-drive-realtime-api google-picker

我正在使用实时API,我正在使用realtime-client-utils。

使用现有代码,我使用此方法创建实时文件:

createRealtimeFile = function(title, callback) {
  gapi.client.load('drive', 'v2', function() {
    gapi.client.drive.files.insert({
      'resource': {
        mimeType: rtclient.REALTIME_MIMETYPE,
        title: title
      }
    }).execute(callback);
  });
}

然后我试图用这个选择器打开文件:

var popupOpen = function () {
      var token = gapi.auth.getToken().access_token;
      var view = new google.picker.View(google.picker.ViewId.DOCS);
      view.setMimeTypes(rtclient.REALTIME_MIMETYPE+ "."+realTimeOptions.appId);
      var picker = new google.picker.PickerBuilder()
          .enableFeature(google.picker.Feature.NAV_HIDDEN)
          .setAppId(realTimeOptions.appId)
          .setOAuthToken(token)
          .addView(view)
          .addView(new google.picker.DocsUploadView())
          .setCallback(pickerCallback)
          .build();
      picker.setVisible(true);
    };

虽然如果我使用setMimeTypes,则找不到文档。如果我删除该过滤器,我的文档将正常显示(以及驱动器中的每次文档)。我正在使用的mime类型是默认类型:

rtclient.REALTIME_MIMETYPE = 'application/vnd.google-apps.drive-sdk';

我正在添加appID,因为这是在实时游乐场上完成的。我也试过没有“。”或appID但没有找到文件。

有关如何修复过滤器的任何建议吗?

3 个答案:

答案 0 :(得分:3)

您应该查找您创建的mimeType。 您使用mimeType rtclient.REALTIME_MIMETYPE创建了文件,并且您正在查找使用mimeType rtclient.REALTIME_MIMETYPE+ "."+realTimeOptions.appId的文件。这就是您没有获取任何文件的原因。

将filepicker代码更改为:

view.setMimeTypes(rtclient.REALTIME_MIMETYPE);

确保你改变

rtclient.REALTIME_MIMETYPE = 'application/{{YOURE_CUSTOM_MIMETYPE}}';

避免与其他应用发生冲突。

答案 1 :(得分:1)

在Android论坛上找到答案。我不得不用这个mimeType创建文件:

REALTIME_MIMETYPE = 'application/vnd.google-apps.drive-sdk.'+appID;

并在视图上使用相同的mimeType:

  view.setMimeTypes(REALTIME_MIMETYPE);

答案 2 :(得分:1)

简短回答:correct your appID。它是您的CLIENT-ID的第一部分。也就是说,如果您的客户端ID为1088706429537-4oqhqr7o826ditbok23sll1rund1jim1.apps.googleusercontent.com,则您的APP_ID为1088706429537.我最初将其与项目ID混淆并出现问题。

我开始给出新答案,因为所有被接受的答案都是错误的,因为他们无视主要问题。他们可能会建议将mime-type改为完全定制的东西。然而,most popular answer says

  

您使用mimeType rtclient.REALTIME_MIMETYPE和。创建了您的文件   你正在寻找mimeType rtclient.REALTIME_MIMETYPE +的文件   “” + realTimeOptions.appId

这似乎是自然而错误的事实。主题作者正确地再现了演示。 Google演示似乎就是这样做的:他们创建了application / vnd.google-apps.drive-sdk文件,并寻找appid-expanded文件。这是正确的,因为无论何时创建REALTIME_MIMETYPE = application/vnd.google-apps.drive-sdk文件,Google云端硬盘都会默默修复文件类型!它使用.APP_ID扩展它。这也意味着您不需要像其他答案那样自定义您的mime类型。我想你可以继续使用application / vnd.google-apps.drive-sdk。我已经检查过:如果某些字母拼写错误,谷歌甚至会修复你的mime类型,这使得提议的定制更加困难。 Google API仅在与REALTIME版本太不相同时才会采用其他mime类型。但我不确定这是否正确,尽管所有其他公认的答案都是“解决方案”,因为我不知道这意味着什么。不过,

要使用application/vnd.google-apps.drive-sdk代替建议的自定义类型,原因是:

  1. 此标准类型由Google在实时游乐场演示而非自定义类型
  2. 中提出
  3. Google将此类型称为“REALTIME_MIMETYPE”。如果您使用不同的东西,则使用Realtime API创建非实时文件。至少没有像谷歌提出的那么多实时。
  4. 如果您指定其他mime类型,Google仍会将其更正为REALTIME_MIMETYPE。这意味着自定义mime类型是不受欢迎的。
  5. 定制的支持者对此一无所知。他们甚至不敢嘲笑谷歌的官方例子是“荒谬的”。他们基本上说我们不应该相信他们。