Google Glass - 未收到订阅通知 -

时间:2014-02-03 14:23:18

标签: .net google-glass google-mirror-api

有人能发现什么是错的吗?回调网址是有效的ssl网址。另外我们如何知道谷歌服务本身是否存在问题?我的网络服务器日志中根本没有看到回调网址的帖子..

我似乎没有收到通知。

        StoredCredentialsDBContext db = new StoredCredentialsDBContext();

        TimelineItem item = new TimelineItem()
        {
            Creator=new Contact(){DisplayName="DLN Reply Card",Id="TESTREPLYCARD" },
            Title = Test Number",
            Text = "Say Test Number",
            Notification = new NotificationConfig() { Level = "DEFAULT" }

        };

        Google.Apis.Mirror.v1.Data.MenuItem menuItem=new Google.Apis.Mirror.v1.Data.MenuItem();
        menuItem.Action="REPLY";

        item.MenuItems = new List<Google.Apis.Mirror.v1.Data.MenuItem>();
        item.MenuItems.Add(menuItem);

        foreach (StoredCredentials creds in db.StoredCredentialSet)
        {
            AuthorizationState state = new AuthorizationState()
            {
                AccessToken = creds.AccessToken,
                RefreshToken = creds.RefreshToken
            };
            MirrorService service = new MirrorService(new BaseClientService.Initializer()
            {
                Authenticator = Utils.GetAuthenticatorFromState(state)
            });
            item.IsPinned = true;
            Subscription subscription = new Subscription();
            subscription.Collection = "timeline";
            subscription.VerifyToken = "XXXXX";
            subscription.UserToken = creds.UserId;
            subscription.Operation = new List<String>();
            subscription.Operation.Add("INSERT");
            subscription.Operation.Add("UPDATE");
            subscription.CallbackUrl = "https://changedthename.com/GG/Notify";

            Subscription t=service.Subscriptions.Insert(subscription).Fetch();

            TimelineItem i=service.Timeline.Insert(item).Fetch();

            SubscriptionsListResponse r= service.Subscriptions.List().Fetch();


        }

执行Fetch()的输出是订阅对象(我只是隐藏了域名):

 ?t
{Google.Apis.Mirror.v1.Data.Subscription}
    CallbackUrl: "https://changedname.com/GG/Notify"
    Collection: "timeline"
    ETag: null
    Id: "timeline"
    Kind: "mirror#subscription"
    Notification: null
    Operation: Count = 2
    Updated: "2014-02-06T16:59:25.642Z"
    UserToken: "XXXXXXXXXX"
    VerifyToken: "XXXXX"

我使用的项目:

 ?i
{Google.Apis.Mirror.v1.Data.TimelineItem}
    Attachments: null
    BundleId: null
    CanonicalUrl: null
    Created: "2014-02-06T16:59:32.729Z"
    Creator: {Google.Apis.Mirror.v1.Data.Contact}
    DisplayTime: null
    ETag: "1391705972729"
    Html: null
    HtmlPages: null
    Id: "73b75493-3371-4b2c-856d-df8674b54ede"
    InReplyTo: null
    IsBundleCover: null
    IsDeleted: null
    IsPinned: false
    Kind: "mirror#timelineItem"
    Location: null
    MenuItems: Count = 1
    Notification: {Google.Apis.Mirror.v1.Data.NotificationConfig}
    PinScore: null
    Recipients: null
    SelfLink: "https://www.googleapis.com/mirror/v1/timeline/73b75493-3371-4b2c-856d-df8674b54ede"
    SourceItemId: null
    SpeakableText: null
    Text: "Say Test Number"
    Title: "Test Number"
    Updated: "2014-02-06T16:59:32.729Z"


?r
{Google.Apis.Mirror.v1.Data.SubscriptionsListResponse}
    ETag: null
    Items: Count = 1
    Kind: "mirror#subscriptionsList"

使用SOapui

我的回调网址的测试有效负载

使用以下有效负载后发送请求

{
  "collection": "timeline",
  "itemId": "d45fcc3a-4346-453a-8783-88667a002387",
  "operation": "UPDATE",
  "userToken": "XXXXXXX",
  "verifyToken": "XXXXX",
  "userActions": [
    {
      "type": "<TYPE>",
      "payload": "<PAYLOAD>"
    }
  ]
}

来自soapui的200 ok回复

HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 04 Feb 2014 17:48:47 GMT
Content-Length: 0

1 个答案:

答案 0 :(得分:1)

我做了几个假设:

  1. 您正在看到张贴在Glass上的卡片。

  2. 您正在使用.NET

  3. 副手,我不知道有什么方法可以确保镜像服务正常工作 - 但每次我怀疑它有问题时,它都证明是我的服务。一些事情要尝试:

    1. 确保您的回调网址确实有效,接受POST命令,并使用HTTP代码200进行响应。您正确使用HTTPS,但请确保您可以使用curl或wget通过POST访问该网站操作,而不仅仅是GET操作。从您所在域以外的计算机上进行测试,以确保正确查找主机名并且您没有被防火墙阻止。

    2. 您可能希望在添加时间轴项目之前进行订阅 - 最佳做法是在用户首次登录时发出一次订阅。我不认为这是它,但我可以看到由于某种原因,订阅最终可能无法正确应用。

    3. 测试以确保在服务器上正确输入项目和订阅 - 检查两个命令返回的内容以确保它们正确或发出service.Subscriptions.List()。Fetch()并检查结果。

    4. 更新:根据您发布的Subscription.Insert()。Fetch()的结果,有些东西看起来很奇怪。 ETag和Id当然不应该为空。有关订阅插入尝试的信息似乎不正确。

      您可能想尝试使用Subscriptions.List()。Fetch()并查看是否有实际注册的订阅。

      更新2 :我仍然建议你做以下其中一项或两项:

      1. 使用https://developers.google.com/glass/v1/reference/subscriptions/insert#examples中.NET示例中提供的代码替换您的订阅代码并进行调用。我对.NET知之甚少,但可能有一个原因导致代码导致问题,因为看起来你的Fetch()调用的结果不是有效的订阅。

      2. https://developers.google.com/glass/v1/reference/subscriptions/list#examples的.NET示例中实现该方法,并在创建后调用它。如果未列出任何订阅,则表明您出于某种原因未创建订阅。