好的,这就是我想做的...
- 用户授权 iPhone 上的应用程序具有对 Google 日历的读/写访问权限
- 我从 Google 获得了某种身份验证令牌
- 将令牌传递给我的 PHP 服务器并将其保存在数据库中
- 使用令牌定期检查 Google 事件并将其存储在服务器的数据库中
- 将 Google 事件数据以 json 格式发送到应用程序
我想在服务器上实现谷歌事件的获取,这样我就可以围绕它们构建额外的功能,比如发送远程推送通知。
我被困在获取身份验证令牌并将其保存在服务器上并使用它从 Google 的日历 api 获取事件的部分,无法找到相同的资源。有人可以对此有所了解。
更新
在第 3 步之前,我已经能够成功实现该场景。
我从 Google 获取身份验证令牌和刷新令牌并将其保存在数据库中。现在使用Google API php 客户端,我正在尝试使用我之前获得的访问令牌连接到 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 客户端 api 中设置访问令牌,而没有指定任何重定向 url 或用户授权访问服务器本身上的 Google 日历时通常使用的其他参数。这应该像我想要的那样工作吗?
更新 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"}'