さて、ここで私がやりたいことは...
- ユーザーは、Google カレンダーへの読み取り/書き込みアクセス権を持つ iPhone 上のアプリを承認しました
- Google から何らかの認証トークンを取得します
- トークンを PHP サーバーに渡し、データベースに保存します
- トークンを使用して Google イベントを定期的にチェックし、サーバーのデータベースに保存します
- Google イベント データを json としてアプリに送信する
リモート プッシュ通知の送信などの追加機能を構築できるように、サーバー上で Google イベントのフェッチを実装したいと考えています。
私は、認証トークンを取得してサーバーに保存し、それを使用して Google のカレンダー API からイベントをフェッチする部分で立ち往生しています。同じリソースを見つけることができませんでした。誰かがこれに光を当てることができますか?
アップデート
ステップ 3 まで、シナリオを正常に実装できました。
Google から認証トークンと更新トークンを取得し、データベースに保存します。Google API の php clientを使用して、先ほど取得したアクセス トークンを使用して Google のカレンダー API に接続しようとしています。次のコードを使用しています...
require_once(APPPATH . "libraries/Google/Google_Client.php");
require_once(APPPATH . "libraries/Google/contrib/Google_CalendarService.php");
$client = new Google_Client();
$client->setAccessToken($google_access_token);
$calendar = new Google_CalendarService($client);
$calendarList = $calendar->calendarList->listCalendarList();
echo print_r($calendarList, true);
しかし、今私はこのエラーを受け取ります...
PHP 致命的なエラー: /myserver/application/libraries/Google/auth/Google_OAuth2.php:162 で「トークンを json でデコードできませんでした」というメッセージを含むキャッチされない例外「Google_AuthException」
スタック トレース: /myserver/application/libraries/Google/Google_Client.php(170): Google_OAuth2->setAccessToken('a_token...')
ユーザーがサーバー自体で Google カレンダーへのアクセスを承認するときに通常使用されるリダイレクト URL やその他のパラメーターを指定せずに、Google クライアント API でアクセス トークンを直接設定しようとしていることを理解しています。これは私がしようとしているように機能するはずですか?
更新 2
さらに掘り下げたところ、setAccessToken
API の Google クライアントはsetAccessToken
メソッドで JSON エンコードされた文字列を想定しているため、アクセス トークンを直接設定しても機能しないことがわかりました。いくつかの微調整の後、コードを次のように変更しました....
require_once(APPPATH . "libraries/Google/Google_Client.php");
require_once(APPPATH . "libraries/Google/contrib/Google_CalendarService.php");
$client = new Google_Client();
$client->setAccessType('offline');
$client->refreshToken($google_refresh_token);
$newToken = $client->getAccessToken();
$client->setAccessToken($newToken);
$calendar = new Google_CalendarService($client);
$calendarList = $calendar->calendarList->listCalendarList();
echo print_r($calendarList, true);
今私が得ているエラーはinvalid_request
.
OAuth2 トークンの更新中にエラーが発生しました。メッセージ: '{"error" : "invalid_request"}'