Opening specific MimeTypes with google picker

2020-03-26 04:12发布

I am working with realtime API and I am making use of realtime-client-utils.

Using existing code, I am creating realtime files with this method:

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

and then I am trying to open files with this picker:

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);
    };

Although if I use the setMimeTypes, no documents are found. If I remove that filter, my documents appear normally(along with every time of document in the drive). THe mime type I am using is the default one:

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

I am adding the appID as this is how its done on realtime-playground. I also tried without the "." or the appID but no documents are found.

Any suggestions about how to fix the filter ?

3条回答
仙女界的扛把子
2楼-- · 2020-03-26 04:20

Short answer: correct your appID. It is the first part of your CLIENT-ID. That is, if your client-id is 1088706429537-4oqhqr7o826ditbok23sll1rund1jim1.apps.googleusercontent.com, your APP_ID is 1088706429537. I initially confused it with the project-id and had your problem.

I started new answer because all accepted ones are wrong since they disregard the main issue. Might be they are right advising to change the mime-type to something completely custom. Yet, the most popular answer says that

You created your file with mimeType rtclient.REALTIME_MIMETYPE and you're looking for files with mimeType rtclient.REALTIME_MIMETYPE+ "."+realTimeOptions.appId

This is seems natural but wrong fact. The topic author is right reproducing the demos. Google demos seem to do exactly that: they create application/vnd.google-apps.drive-sdk file and look for appid-expanded ones. This is correct actually because whenever you create a REALTIME_MIMETYPE=application/vnd.google-apps.drive-sdk file, google drive silently fixes file type! It expands it with .APP_ID. This also means that you do not need to customize your mime-type, as other answers propose. You can proceed with application/vnd.google-apps.drive-sdk, I suppose. I have checked: Google will even fix your mime type if some letters are misspelled, which makes the proposed customization even harder. Google API will take another mime type only if it is too different from REALTIME one. But I am not sure that this is a right thing to do, despite this is proposed by all other accepted answers as 'solution' because I do not know about the difference this implies. Nevertheless,

to to tie up, the reasons to use application/vnd.google-apps.drive-sdk instead of proposed custom types are:

  1. This standard type is proposed by Google in realtime playground demos instead of custom type
  2. Google calls this type 'REALTIME_MIMETYPE'. If your use something different, you use Realtime API to create non-realtime files. At least not that much realtime as proposed by google.
  3. If you specify a different mime type, google still corrects it to REALTIME_MIMETYPE. This means that custom mime types are unwelcomed.
  4. Proponents of customization do not understand anything of this. They even dare to laugh at Google official examples as 'ridiculous'. They basically say that we should not trust them.
查看更多
ゆ 、 Hurt°
3楼-- · 2020-03-26 04:28

Found the answer on an android forum. I had to create files with this mimeType:

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

and use same mimeType on view :

  view.setMimeTypes(REALTIME_MIMETYPE);
查看更多
我欲成王,谁敢阻挡
4楼-- · 2020-03-26 04:45

You should look for mimeType you created with. You created your file with mimeType rtclient.REALTIME_MIMETYPE and you're looking for files with mimeType rtclient.REALTIME_MIMETYPE+ "."+realTimeOptions.appId That is the reason why you're not getting any files.

Change filepicker code to:

view.setMimeTypes(rtclient.REALTIME_MIMETYPE);

And make sure you change

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

to avoid collision with other apps.

查看更多
登录 后发表回答