2013-08-23 4 views
5

に認証した後、PHPサーバー上のGoogleカレンダーのイベントを取得...私は何をしたいですので、ここでオーケーiOSアプリ

  1. ユーザーが、私はGoogleカレンダーへの読み取り/書き込みアクセス
  2. とiPhone上のアプリを許可私のPHPサーバーにトークンでGoogle
  3. 峠からのいくつかの種類の認証トークンを取得し、定期的に、Googleのイベントをチェックして、サーバーのデータベース
  4. GOOGを送信し、それらを格納するデータベース
  5. 使用トークンに保存しますleイベントデータをjsonとしてアプリケーションに送信する

Googleプッシュイベントをサーバーに実装して、リモートプッシュ通知のような追加機能を構築できます。

認証トークンを取得してサーバーに保存し、それを使ってGoogleのカレンダーAPIからイベントを取得しましたが、同じリソースを見つけることができませんでした。誰かがこれにいくつかの光を投げることができます。


UPDATE

私は正常に私はGoogleからの認証トークンとリフレッシュトークンを取得し、それをデータベースに保存し、ステップ3

までのシナリオを実装することができました。今度は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 Fatal error: Uncaught exception 'Google_AuthException' with message 'Could not json decode the token' in /myserver/application/libraries/Google/auth/Google_OAuth2.php:162

Stack trace: /myserver/application/libraries/Google/Google_Client.php(170): Google_OAuth2->setAccessToken('a_token...')

私は私が直接指定せずに、GoogleのクライアントAPIでアクセストークンを設定しようとしていますことを理解して...次のコードを使用していますユーザーがサーバー上でGoogleカレンダーへのアクセスを許可したときに通常使用されるリダイレクトURLまたはその他のパラメーター。これは私のように動作するはずですか?


さらにいくつかの掘削時にUPDATE 2

、私が直接APIをGoogleクライアントとして動作しませんsetAccessTokenを使用してアクセストークンを設定すること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のことです。

Error refreshing the OAuth2 token, message: '{"error" : "invalid_request"}'

答えて

3

最後に私自身の質問に答えることができます。これが他の人に役立つことを願っています

ステップ1 & 2. this excellent tutorial on mobiletutsの手順に従って、iOSアプリケーションでGoogle OAuthプロトコルを使用しています。

ステップ3。アクセストークンとリフレッシュトークンをWebサーバーのデータベースに保存しました。私はこのコードでGoogleカレンダーのAPIに接続され、私はiOSのアプリから得たリフレッシュトークンを使用して

ステップ4 ...

require_once(APPPATH . "libraries/Google/Google_Client.php"); 
require_once(APPPATH . "libraries/Google/contrib/Google_CalendarService.php"); 

/* setup google client object */ 
$client = new Google_Client(); 
$client->setClientId(GOOGLE_CLIENT_ID); 

/* refresh access token */ 
$client->refreshToken($google_refresh_token); 
$newToken = $client->getAccessToken(); 
$client->setAccessToken($newToken); 

/* get google calendars list */ 
$calendar = new Google_CalendarService($client); 
$calendarList = $calendar->calendarList->listCalendarList(); 
echo print_r($calendarList, true); 
+0

あなたはGoogle_Client :: refreshToken 'にあなたの呼び出しの後の2行を削除することができます'。その関数のコード内のコメントは、「指定されたリフレッシュトークンで新しいOAuth 2.0アクセストークンを取得します」ということです。実際には、新しいアクセストークンをクライアントの現在のアクセストークンとして設定します。 – Jonathan

+0

...また、クライアントIDだけでなくクライアントシークレットも設定しない限り、これは機能しません。 (N.B.「client_id」と「client_secret」の両方は、Google API PHPクライアントの/ a設定ファイルで設定できます) – Jonathan

+0

@dvijaz - アクセストークンに関するヒントをありがとう。 'client_secret'に関する限り、' client_secret'も設定せずにコードが動作しています。 – vikmalhotra

関連する問題