Google Calendar推送通知回调疑难解答

问题描述 投票:2回答:1

我已经实现了一个使用日历API创建日历事件的c#应用。

为了使日历与我们的本地数据库保持同步,我在日历上创建了一只手表。下面的代码执行此操作,据我所知,创建了一个手表。

Channel watchChannel = new Channel()
{
    Id = ConfigurationManager.AppSettings["GOOGLE_CALENDAR_WATCH_NAME"],
    Type = "web_hook",
    Address = ConfigurationManager.AppSettings["GOOGLE_CALENDAR_SYNC_TRIGGER_CALLBACK_URL"],
    Expiration = (unixTimestamp + NINETY_DAYS_IN_SECONDS) * 1000 //milliseconds
};

try
{
    logger.Debug("Creating calendar watch with the name " +
                 ConfigurationManager.AppSettings["GOOGLE_CALENDAR_WATCH_NAME"] + " for calendar with id " + remoteCalendarId);
    Channel returnChannel = service.Events.Watch(watchChannel, remoteCalendarId).Execute();

我的问题是没有调用回调URL(我已经确认了域的所有权并为用户验证了它,这不应该成为问题)。

  • 我该如何调试?有什么地方我可以看看谷歌的尝试打电话给回调URL?
  • 我说,据我所知一切都已创建,但是也许我错了,我应该在看returnChannel吗?
  • 是否有任何方法可以列出特定日历的所有已创建手表/频道?如果是这样,那是通过哪个API公开的?

04.04-更多信息:

这些是在拨出电话(watchChannel)和返回对象(returnChannel)上设置的参数。

watchChannel

returnChannel

再次查看它,我还有其他几个问题:

  • 我可以确定以上内容返回了HTTP-200响应吗?客户端库似乎抽象出了实际的请求/响应,而我在所查看的对象中找不到任何痕迹。由于我得到的4xx响应已转换为异常,这是我对任何非200响应的期望,但是我可以确定吗?
  • 真的没有办法跟踪Google在调用回调URL时所做的尝试吗?由于似乎没有办法握住已创建的手表,这让我感到惊讶,因为没有GUI可以追踪到它。使得寻找错误真的很困难。

验证码

我使用以下代码对系统用户进行身份验证,然后以“普通”非系统帐户为幌子进行操作(因为如果您实际上想查看日历)。

ServiceAccountCredential credential = 
    GoogleCredential.FromJson(GOOGLE_SYSTEM_USER_AUTH_INFORMATION)
        .CreateScoped(Scopes)
        .UnderlyingCredential as ServiceAccountCredential;

var userField =
    typeof(ServiceAccountCredential).GetField("user", BindingFlags.NonPublic | BindingFlags.Instance);
userField?.SetValue(credential, GOOGLE_CALENDAR_USERNAME); //Act in the guise of the normal user GOOGLE_CALENDAR_USERNAME


service = new CalendarService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = ApplicationName,
});

一时兴起,我访问了ResourceURI返回。它给了我

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
}

  • 此手表的状态?如果是这样,为什么在创建它时没有得到403?
  • 我真的很认真吗?还是我通过浏览器发出的请求是?
c# calendar google-calendar-api google-api-dotnet-client
1个回答
0
投票

回调URL必须为https(证书),否则将不会被调用!

© www.soinside.com 2019 - 2024. All rights reserved.