2

我正在使用實時API,並且正在使用realtime-client-utils。用google picker打開特定的MimeTypes

使用現有的代碼,我創建實時的文件用這種方法:

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,沒有找到文件。如果我刪除了該過濾器,我的文檔通常會顯示(以及驅動器中的每次文檔)。我正在使用的默認類型是默認的:

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

我正在添加appID,因爲這是如何在實時操場上完成的。我也試過沒有「。」或appID,但沒有找到文檔。

有關如何修復過濾器的任何建議?

回答

1

在android論壇上找到答案。我不得不與此mime類型創建文件:

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

並在視圖中使用相同的mime類型:

view.setMimeTypes(REALTIME_MIMETYPE); 
2

你應該尋找你創建的mimeType。 您使用mimeType rtclient.REALTIME_MIMETYPE創建了您的文件,並且您正在使用mimeType查找文件rtclient.REALTIME_MIMETYPE+ "."+realTimeOptions.appId這就是您沒有收到任何文件的原因。

變化filepicker代碼:

view.setMimeTypes(rtclient.REALTIME_MIMETYPE); 

並確保你改變

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

,以避免與其他應用程序衝突。

+0

我只是運行一些測試。使用這種方法可以使濾鏡正常工作。儘管當我嘗試打開已共享的文件時,出現一個彈出窗口(在我選擇文件並打開後): 「文件未找到,它不存在或者您沒有讀訪問權限文件。」 – Giannis

+0

最初創建該文件的Google用戶可以正常打開它。 – Giannis

1

簡短的回答:correct your appID。這是您的CLIENT-ID的第一部分。也就是說,如果您的客戶端ID是1088706429537-4oqhqr7o826ditbok23sll1rund1jim1.apps.googleusercontent.com,您的APP_ID是1088706429537.我最初將其與項目ID混淆並且遇到了問題。

我開始了新的答案,因爲所有接受的答案都是錯的,因爲他們忽視了主要問題。可能是因爲他們建議將MIME類型改爲完全自定義的東西。然而,most popular answer says

你有mime類型rtclient.REALTIME_MIMETYPE創建您的文件和 你正在尋找與mime類型rtclient.REALTIME_MIMETYPE + 文件 「」 + realTimeOptions.appId

這似乎是自然但錯誤的事實。主題作者正在重現演示。谷歌演示似乎是這樣做的:他們創建application/vnd.google-apps.drive-sdk文件並查找appid擴展的文件。這實際上是正確的,因爲每當你創建一個REALTIME_MIMETYPE = application/vnd.google-apps.drive-sdk文件時,google驅動默默修復文件類型!它用.APP_ID擴展它。這也意味着你不需要像其他答案所建議的那樣定製你的mime類型。我想可以繼續使用application/vnd.google-apps.drive-sdk。我已經檢查過:如果某些字母拼寫錯誤,Google甚至會修復您的MIME類型,這使得提議的定製更加困難。 Google API只有在與REALTIME完全不同時纔會採用另一種MIME類型。但我不確定這是否是正確的做法,儘管這是所有其他被接受的答案提出的'解決方案',因爲我不知道這意味着什麼。然而,

來綁起來,原因使用application/vnd.google-apps.drive-sdk,而不是提出自定義類型:

  1. 本標準型實時操場演示,而不是自定義類型建議由谷歌
  2. 谷歌稱這鍵入'REALTIME_MIMETYPE'。如果您使用不同的東西,則使用Realtime API創建非實時文件。至少不是google提出的那麼多實時。
  3. 如果您指定不同的MIME類型,Google仍會將其更正爲REALTIME_MIMETYPE。這意味着自定義MIME類型是不受歡迎的。
  4. 定製的支持者不理解這一切。他們甚至敢於嘲笑谷歌官方的例子「荒謬」。他們基本上說我們不應該相信他們。
+0

這是正確的答案,或者至少它實際上有效。 API在創建文件時知道AppID,並將其附加到特殊的「快捷方式」mimeType「application/vnd.google-apps.drive-sdk」。然後,您使用「application/vnd.google-apps.drive-sdk」+'。'過濾您的選擇器的視圖。 + TheAppID,其中TheAppID是ClientID的第一部分。這會正確篩選選擇器,以僅顯示應用創建的快捷方式文件。 – HeyHeyJC