当用户使用google plus凭据登录我的应用程序时,我正在使用google-api-client gem向google plus发帖。
以下是我的代码。
require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'
keypath = Rails.root.join('config','poo-02a507f45ab4.p12').to_s
key = Google::APIClient::KeyUtils.load_from_pkcs12(keypath, 'notasecret')
client = Google::APIClient.new(
:application_name => 'my app',
:application_version => '1.0.0'
)
urlshortener = client.discovered_api('urlshortener', 'v1')
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => ['https://www.googleapis.com/auth/prediction','https://www.googleapis.com/auth/plus.stream.write','https://www.googleapis.com/auth/plus.login','https://www.googleapis.com/auth/urlshortener','https://www.googleapis.com/auth/plus.circles.write'],
:issuer => 'id@developer.gserviceaccount.com',
:signing_key => key)
client.authorization.fetch_access_token!
batch = Google::APIClient::BatchRequest.new do |result|
puts result.data
end
batch.add(:api_method => urlshortener.url.insert,:body_object => { 'longUrl' => 'https://www.facebook.co.in' })
client.execute(batch)
尝试此代码时,会给出以下错误。
{\n \"domain\": \"usageLimits\",\n \"reason\": \"accessNotConfigured\",\n \"message\": \"Access Not Configured. The API is not enabled for your project, or there is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your configuration.\",\n
我已在开发者控制台中启用了Google + API和联系人API。
请帮我解决这个问题。
答案 0 :(得分:1)
您遇到的问题是您使用的是service account。
Google OAuth 2.0系统支持服务器到服务器之间的互动,例如网络应用程序和Google服务之间的互动。此方案称为服务帐户,该帐户属于您的应用程序而不是单个最终用户。您的应用程序代表服务帐户调用Google API,因此用户无法直接参与。
如果您想代表用户发帖,则需要使用Oauth2,然后您就可以对用户进行身份验证。
<强>更新强>
因此,您知道无法向用户发布Google+时间线。你能做的最好的事情就是发布一个名为moments的东西,它并不是真的一样。我们在2011年提出了一个问题请求,我认为他们尚未添加此功能。