1

我正在開發一個Cordova的應用程序,並希望將文件保存在Googe Drive中。在Cordova/Phonegap中使用Google API javascript

我已成功登錄Google,使用cordova-plugin-googleplus(https://github.com/EddyVerbruggen/cordova-plugin-googleplus)。然而,我無法讓插件返回給我accessToken或idToken,所以我可以使用谷歌JavaScript API。

window.plugins.googleplus.login(
    { 
     'scopes': 'https://www.googleapis.com/auth/drive.file profile', 
     'offline': true, 
     'webApiKey': ‘CODE’ 
    }, 
    function (obj) { 
     $scope.$apply(function() { 
      $scope.srcImage = obj.imageUrl; 
      $scope.NomeGoogle = obj.displayName; 
     }); 
    }, 
    function (msg) { 
     alert('Erro'); 
     alert('error: ' + msg); 
    } 
); 

我嘗試使用下面的代碼,而是回到我下面的錯誤:

"Uncaught gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy"

gapi.load('auth2', function() { 

    gapi.auth2.init({ 

     client_id: 'REVERSED_CLIENTID', 

    }).then(function(){ 

     auth2 = gapi.auth2.getAuthInstance(); 
     console.log(auth2.isSignedIn.get()); //now this always returns correctly   

    }); 
}); 

回答

3

我設法弄清楚這個問題,爲什麼wasn'從插件獲取serverAuthCode。 有必要在Google Developers Console上創建2個憑據。第一個必須是Android,這將用於插件,第二個應該是Web應用程序,這是實現serverAuthCode所必需的。

的代碼看起來像這樣

window.plugins.googleplus.login(
    { 
     'scopes': 'https://www.googleapis.com/auth/drive.file profile', 
     'offline': true, 
     'webApiKey': ‘REVERSED_CODE of Web App Credential’ 
    }, 
    function (obj) { 
     $scope.$apply(function() { 
      $scope.srcImage = obj.imageUrl; 
      $scope.NomeGoogle = obj.displayName; 
     }); 


      var data = $.param({ 
       client_id: 'REVERSED_CODE of Web App Credential', 
       client_secret: 'SECRET_CODE of Web App Credential', 
       grant_type: 'authorization_code', 
       code: obj.serverAuthCode 
      }); 

      var config = { 
       headers : { 
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' 
       } 
      } 

      $http.post("https://www.googleapis.com/oauth2/v3/token", data, config).success(function(data, status) { 
       //data.access_token; 

/** from now you can do use of google API **/ 

      }) 
      .error(function(data, status) { 
       console.log(data); 
       console.log(status); 
      }); 

    }, 
    function (msg) { 
     alert('Erro'); 
     alert('error: ' + msg); 
    } 
); 

謝謝您的回覆rojobo

+0

什麼我應該在angular2中使用打字稿嗎? $ .param是Jquery方法,但angular2不支持Jquery? –

0

嘗試

window.plugins.googleplus.login(
     { 
      'scopes': 'https://www.googleapis.com/auth/drive.file profile', 
      'offline': true, 
      'cookiepolicy': 'none', 
      'webApiKey': ‘CODE’ 
     } 
0

起初我希望能跳過需要科爾多瓦 - 插件 - GOOGLEPLUS,只是使用gapi科爾多瓦/ PhoneGap的內以處理與谷歌認證,但它似乎gapi client authentication may not work within cordova's file:// protocol

answer from @Joao送我的方向是正確的,但我一直得到試圖使用gapi取回後當Invalid cookiePolicy錯誤access_token(這是因爲我忽略第2步下面列出,並與plugini我驗證後錯誤地試圖驗證再次gapi)。

有一個步驟(下面提到#3),我不清楚。爲了與谷歌進行身份驗證,然後用在科爾多瓦/ PhoneGap的,這個工作不是gapi ...

  1. 使用cordova-plugin-googleplus照顧身份驗證和訪問令牌的檢索,不使用GAPI的一切都在這裏
  2. 負載GAPI客戶端庫(略過gapi.client.init()通話和所有的正常GAPI認證程序)
  3. 附上我們從插件到GAPI客戶拿到了訪問令牌,然後根據需要讓你的GAPI電話

第3步了some digging for me to find,並意味着我需要添加access_token

gapi.client.setToken({access_token:'abc123456xyz'}); 

一旦訪問令牌附於GAPI客戶端,我可以用科爾多瓦/ PhoneGap的內GAPI:

// Load the YouTube API. 
gapi.client.load('youtube', 'v3', function() { 
    // Do stuff... 
};