5

さて、ここで私がやりたいことは...

  1. ユーザーは、Google カレンダーへの読み取り/書き込みアクセス権を持つ iPhone 上のアプリを承認しました
  2. Google から何らかの認証トークンを取得します
  3. トークンを PHP サーバーに渡し、データベースに保存します
  4. トークンを使用して Google イベントを定期的にチェックし、サーバーのデータベースに保存します
  5. 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

さらに掘り下げたところ、setAccessTokenAPI の 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"}'

4

1 に答える 1