You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5项目中创建Google Calendar独立提醒(非事件通知)方案咨询

解决方案:创建Google Calendar独立提醒(非事件通知)

你遇到的问题我很清楚——想用Laravel创建那种独立的、不属于任何事件的Google Calendar提醒,而不是绑定在事件上的通知。其实Google Calendar里的这种独立提醒,本质上对应的是Google Tasks(任务),因为Google现在把Calendar的独立提醒和Tasks功能做了深度集成,创建的Tasks会自动显示在Calendar视图里,和你截图里的效果一致。

下面是具体的实现步骤,你可以换掉现有的laravel-google-calendar包,用官方的Google客户端包来实现:

1. 准备工作:启用Google Tasks API

首先登录你的Google Cloud控制台,找到对应的项目,搜索并启用Google Tasks API(和之前启用Calendar API的流程一样)。

2. 安装依赖包

在Laravel项目里安装官方的Google PHP客户端包:

composer require google/apiclient:^2.0

3. 配置认证信息

在.env文件里添加你的Google OAuth2认证信息(和之前配置Calendar API的信息一致,只需要确保权限包含Tasks):

GOOGLE_CLIENT_ID=你的客户端ID
GOOGLE_CLIENT_SECRET=你的客户端密钥
GOOGLE_REDIRECT_URI=你的重定向地址
GOOGLE_ACCESS_TOKEN=你的访问令牌
GOOGLE_REFRESH_TOKEN=你的刷新令牌

4. 创建Tasks服务类

新建一个处理Tasks的服务类,用来封装创建提醒的逻辑:

<?php

namespace App\Services;

use Google\Client;
use Google\Service\Tasks;

class GoogleTasksService
{
    protected $client;
    protected $tasksService;

    public function __construct()
    {
        $this->client = new Client();
        $this->client->setClientId(env('GOOGLE_CLIENT_ID'));
        $this->client->setClientSecret(env('GOOGLE_CLIENT_SECRET'));
        $this->client->setRedirectUri(env('GOOGLE_REDIRECT_URI'));
        $this->client->setAccessType('offline');
        $this->client->addScope(Tasks::TASKS);

        // 设置令牌信息
        $this->client->setAccessToken(json_encode([
            'access_token' => env('GOOGLE_ACCESS_TOKEN'),
            'refresh_token' => env('GOOGLE_REFRESH_TOKEN'),
            'expires_in' => 3600,
        ]));

        // 自动刷新过期的令牌
        if ($this->client->isAccessTokenExpired()) {
            $newToken = $this->client->fetchAccessTokenWithRefreshToken($this->client->getRefreshToken());
            // 这里可以把新的access_token保存到.env或者数据库,方便后续使用
        }

        $this->tasksService = new Tasks($this->client);
    }

    /**
     * 创建独立提醒(即Google Task)
     * @param string $title 提醒标题
     * @param string $dueDate 提醒时间,格式为ISO 8601(比如 '2024-05-20T09:00:00Z')
     * @param string $taskListId 任务列表ID,默认用 '@default' 即可
     * @return \Google\Service\Tasks\Task
     */
    public function createStandaloneReminder(string $title, string $dueDate, string $taskListId = '@default')
    {
        $task = new \Google\Service\Tasks\Task();
        $task->setTitle($title);
        $task->setDue($dueDate);

        // 如果需要重复提醒,可以设置重复规则,比如每天重复5次:
        // $task->setRecurrence(['RRULE:FREQ=DAILY;COUNT=5']);

        return $this->tasksService->tasks->insert($taskListId, $task);
    }
}

5. 在控制器中使用服务类

现在你可以在控制器里调用这个服务来创建提醒了:

<?php

namespace App\Http\Controllers;

use App\Services\GoogleTasksService;
use Carbon\Carbon;

class ReminderController extends Controller
{
    public function createReminder()
    {
        $tasksService = new GoogleTasksService();
        // 设置提醒时间,比如明天早上9点
        $dueDate = Carbon::tomorrow()->setTime(9, 0)->toIso8601String();
        $reminder = $tasksService->createStandaloneReminder('明天早上9点喝水', $dueDate);

        return response()->json([
            'message' => '独立提醒创建成功',
            'reminder_id' => $reminder->getId()
        ]);
    }
}

关键说明

  • 创建的Task会自动同步到Google Calendar中,显示为你截图里的那种独立提醒条目,完全区别于事件的通知提醒。
  • 如果需要管理这些提醒(修改、删除),可以继续扩展这个服务类,调用Tasks API对应的方法即可。
  • 认证方面,如果是处理用户的个人日历,需要走OAuth2授权流程获取用户的令牌;如果是服务账号操作,记得把服务账号添加到目标日历的共享列表中。

内容的提问来源于stack exchange,提问作者Dessauges Antoine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:31