我正在尝试使用Google API Javascript客户端在我的应用程序上使用Google Login,然后访问用户的电子邮件地址和联系人。我将其与AngularJS结合起来,我已经了解到最好将其作为自己的服务。
下面是目前为止服务的代码:
.service('googleLogin', ['$http', '$rootScope', function ($http, $rootScope) {
var clientId = '{MY CLIENT KEY}',
apiKey = '{MY API KEY}',
scopes = 'https://www.googleapis.com/auth/userinfo.email https://www.google.com/m8/feeds',
domain = '{MY COMPANY DOMAIN}';
this.handleClientLoad = function () {
// Step 2: Reference the API key
gapi.client.setApiKey(apiKey);
gapi.auth.init(function () { });
window.setTimeout(checkAuth, 1);
};
this.checkAuth = function() {
gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: true, hd: domain }, this.handleAuthResult );
};
this.handleAuthResult = function(authResult) {
if (authResult && !authResult.error) {
gapi.client.load('oauth2', 'v2', function () {
var request = gapi.client.oauth2.userinfo.get();
request.execute(function (resp) {
console.log(userEmail);
});
});
}
};
this.handleAuthClick = function (event) {
// Step 3: get authorization to use private data
gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false, hd: domain }, this.handleAuthResult );
return false;
};
}]);
然后我从控制器调用它,如下所示:
$scope.login = function () {
googleLogin.handleAuthClick();
};
这样可以正常工作,并且API被正确调用。但是现在,我不确定如何通过服务从API获取数据。我需要获取用户的电子邮件地址,以及他们的联系人列表。我不能只使用单独的get
函数来返回这些值,因为似乎API客户端调用必须在链中进行(例如,handleAuthResult
作为handleAuthClick
中的参数调用)。
我也尝试过将它们设置为$rootScope
值,或者只是普通变量,但是一旦控制器调用它们,它们总是以undefined
的形式出现。
我的方法正确吗?我如何从Google API中获取这些变量,然后将其发送到服务器和控制器?谢谢。
2条答案
按热度按时间lyr7nygr1#
我最终使用了angularJS中的promise/defer实现,文档为here。
以下是最后一项服务:
以及它目前在控制器中的调用方式:
e5nqia272#
使用以下方式:
如果您的应用程序是一个应用程序,那么您可以使用这个方法来验证您的应用程序。System.out.println(“已加载应用程序默认凭据。”);返回凭据;} catch(IOException e){ //不需要执行任何操作,我们将返回到其他凭据。}