最初のタスクは次のように簡単です:Google+ページから最新の投稿を入手してください。サーバーアプリケーションでGoogle APIにログインしてGoogle Plusを使用するにはどうすればよいですか?
インターネット上のすべての例が古くなっているか間違っているか、有効でないように見えるのは3日かかりました。 Googleの開発者向けドキュメントでも、多大な助けは得られず、混乱しているドキュメントのページごとにますます複雑化しています。だから、みんな、私はあきらめている。
まず、ドキュメント(https://developers.google.com/identity/protocols/OAuth2WebServer)に記載されているOAuth 2.0プロシージャを実装しようとしました。そのタイトルが示すように、それはまさにサーバーアプリケーションからの接続です。私はそれに従って、一見、それは働いた:私はバックコールを取得し、正常に認証され、アクセストークンを取得し、それを格納し、ポストをフェッチする簡単な呼び出しを行った。
// Initialization
$this->googleClient = new Google_Client();
$this->googleClient->setAuthConfig(Json::decode($config->get('client_json')));
$this->googleClient->setAccessType('offline');
$this->googleClient->setIncludeGrantedScopes(TRUE);
$this->googleClient->addScope('https://www.googleapis.com/auth/plus.me');
$this->googleClient->setRedirectUri(Url::fromRoute('mymodule.gplus.callback')->setAbsolute()->toString());
// The callback
$client->authenticate($code);
$accessToken = $client->getAccessToken();
(ここでは愚かに思えただけの事は - スコープである私は、私はちょうど公開ページから公開の投稿を読むために必要がある場合は、私が主張すべきかスコープわからなかったので、私はちょうど最初に選びました。関連見えたランダムエントリー)
私は、トークンを持って、私の記事を取得することができると言いましたよう:
// Using Google_Service_Plus
$this->client()->setAccessToken($access_token);
$this->googleServicePlus = new Google_Service_Plus($this->client($reset));
$this->googleServicePlus->activities->listActivities($endpoint, 'public', ['maxResults' => 1]);
しかし、1時間後に、それはちょうどトークンが古いか何かであると主張して動作を停止し、それが必要リフレッシュする。そして、ここでショーストッパーが来る:私はトークンをリフレッシュする方法がないことが分かった。
$response
から
authenticate()
まではリフレッシュトークンは返されません(他の回答で何度も言及されていますが)ので、リフレッシュする方法はありません。
私は(私のcomposer.json
から:"google/apiclient": "^2.0"
)をライブラリに掘ってみましたとauthenticate()
方法は、実際のトークンと遊ぶように見えるいくつかの他の方法がある非推奨されていることを考え出しました。 https://developers.google.com/identity/protocols/OAuth2ServiceAccount
は、だから私は私がしたすべてを放棄し、新しい何かを実装する必要があります。私は完全に別のトピックと認証の方法は、ここで説明するために私たちをリードしている...いくつかアプリケーションデフォルトクレデンシャルを求め\Google_Client::fetchAccessTokenWithAssertion()
を試してみましたか?どのようにすれば、私はこの簡単なニュースを取り出すことができますか?
長い質問申し訳ありません。