Android Google日历“无法启动活动”

时间:2016-03-10 13:57:52

标签: android google-chrome http-headers google-calendar-api icalendar

案例1 我在亚马逊AWS上托管了一个日历活动iCal .ics 文件,并且我的Android应用程序中集成了HTTP URL。

Here is the file

当用户点击URL时,会显示一个意向选择器,其中包含以下选项:

  • 日历应用
  • 浏览器下载文件

当我选择Google日历时,它会向我显示“无法启动活动”的错误

当我选择Chrome时,文件会被下载,当用户点击下载的文件时,它会显示相同的错误“无法启动事件”

以下是使用桌面chrome http客户端邮递员

下载文件时的响应标头
Accept-Ranges → bytes
Content-Length → 959
Content-Type → application/octet-stream
Date → Thu, 10 Mar 2016 13:45:10 GMT
ETag → "5d48719213395a28e09e8adf01f6ce83"
Last-Modified → Wed, 09 Mar 2016 15:24:22 GMT
Server → AmazonS3
x-amz-id-2 → XXXXXXXXXXXXXXXXXXXXXXXXX
x-amz-request-id → XXXXXXXXXXXXXXXXXXX

案例2 为了实验,我在我的本地Apache服务器上编写了一个简单的PHP脚本来下载相同的文件,而不是直接从HTTP URL访问文件

PHP代码

<?php
$file = $_GET['file'];
if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
        exit;
    }
?>

文件已成功下载,然后

  • 点击下载的文件
  • 从意图选择器中选择Google日历
  • 在Google日历中成功添加了活动

以下是使用PHP脚本时的响应标头

Cache-Control → must-revalidate, post-check=0, pre-check=0
Connection → Keep-Alive
Content-Description → File Transfer
Content-Disposition → attachment; filename=World_Television_Premiere_of_House_Of_Cards_March_1213_5pm_on_Zee_Cafe.ics
Content-Length → 959
Content-Transfer-Encoding → binary
Content-Type → application/octet-stream
Date → Thu, 10 Mar 2016 07:27:15 GMT
Expires → 0
Keep-Alive → timeout=5, max=100
Pragma → public
Server → Apache/2.4.7 (Ubuntu)
X-Powered-By → PHP/5.5.9-1ubuntu4.14

任何人都可以帮助理解为什么事件没有保存或为案例1工作?

提前致谢。 请帮忙。

修改

Android设备:Nexus 6(6.0.1)

Google Calendar App:5.3.6-115544951-release

3 个答案:

答案 0 :(得分:0)

在第一种情况下,您可能希望将Content-Type设置为text / calendar

在第二种情况下,事情确实有效,可能是因为您传入的文件名以.ics结尾的内容处理。因此,客户端可以从扩展名推断出格式。

答案 1 :(得分:0)

目前 - 也就是2016年4月27日 - 所提供的文件在我的Google Calendar for Android v.5.4-1198上正常打开...但我遇到了类似的问题,结果发现谷歌日历很难导入。strong文件 UTF-8与BOM 。现在我将它们作为UTF-8从服务器发送而没有BOM,一切都很好。

答案 2 :(得分:0)

我的Web应用程序创建的.ics文件存在类似问题。桌面gmail对它们的反应很好,但在android打开附件导致“无法启动事件”。 Google日历为其邀请邮件生成的ICS文件工作正常,因此我进行了一些二进制搜索并找出了问题:我的.ics文件缺少DTSTAMP属性。该属性是强制性的,因此移动应用程序抱怨是错误的,我只是希望错误消息提供更多信息。

经验教训是:Web应用程序可能比移动应用程序更松散,因此不要假设您已经正确实施了该标准,因为它在一个或另一个中工作正常。