检测谁访问了您的 Google 文档
Detect who accessed your Google doc
我为 Google 文档创建了 public link。
现在任何拥有 link 的人都可以访问它。
有些用户在访问 Google 文档时可能实际上登录了 Google 帐户。
有没有办法获取访问我的文档的用户的电子邮件 ID?
如果没有,是否有解决方法?就像在其中放置一个 link,如果用户点击它会获取用户的电子邮件 ID(只有当他登录到他的 Google 帐户时才有可能)
实现相同目标的任何替代方法可能是使用 Google 工具或其他一些工具,或者可能是其他文档的提供者?
关注 public link 的用户是匿名的。 Google docs api 不提供控制文档可访问性的接口,因此很可能根本无法获得有权访问该文档的用户
您只能访问您组织中用户的电子邮件地址,或者您明确与之共享文档的用户,或者明确授权您访问其身份的用户。安全政策不允许您访问其他不相关帐户的电子邮件地址。
对于允许您访问其电子邮件地址的用户,您可以使用 Apps 脚本安装一个 onOpen 触发器,它可以在用户访问文档时触发一个函数。您可以通过以下方式进行:
流量:
- 按照 these steps or programmatically.
手动安装 onOpen
触发器
- 将以下函数复制到脚本编辑器并保存项目。此函数执行以下操作:(1) 使用 getActiveUser() 检索正在访问文档的用户的电子邮件,(2) 如果安全策略不允许访问,则将
user
设置为 Not available
到用户的身份,(3) 检索具有特定 ID 的点差 sheet,以及 (4) 将用户和当前日期附加到您的 sheet.
function onOpenTrigger() {
let user = Session.getActiveUser().getEmail();
if (!user) user = "Not available";
const sheet = SpreadsheetApp.openById("YOUR_SPREADSHEET_ID").getSheetByName("Sheet1"); // Spreadsheet ID and sheet name according to your preferences
sheet.appendRow([user, new Date()]);
}
执行此操作后,每次用户访问文档时,新行将附加到相应的传播sheet,包括电子邮件地址(或 Not available
如果您不允许访问那个)和当前日期。
其他账户:
为了从其他帐户中获取数据,您需要获得相应用户的明确同意。
选项 1.自定义菜单:
实现此目的的一个选项是使用 simple onOpen
trigger to create a custom menu,它可用于 运行 获取电子邮件地址的功能。在这种情况下,用户应在打开文档时单击自定义菜单,以检索访问信息。例如,请参阅此示例:
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu('Log user')
.addItem('Run script', 'addUserAccess')
.addToUi()
}
function addUserAccess(){
let user = Session.getActiveUser().getEmail();
if (!user) user = "Not available";
}
然后,您如何处理这些数据将取决于您的具体情况。您可以像前面的示例一样将此数据附加到您的传播sheet(但这需要传播sheet public),或者使用 PropertiesService 存储它,并且稍后将其导出到您喜欢的位置。
选项 2. 编辑器 add-on:
另一种选择是将您的脚本设为 add-on。有关详细信息,请参阅 Extending Google Docs with Add-ons and Editor add-on authorization。
我为 Google 文档创建了 public link。 现在任何拥有 link 的人都可以访问它。 有些用户在访问 Google 文档时可能实际上登录了 Google 帐户。
有没有办法获取访问我的文档的用户的电子邮件 ID?
如果没有,是否有解决方法?就像在其中放置一个 link,如果用户点击它会获取用户的电子邮件 ID(只有当他登录到他的 Google 帐户时才有可能)
实现相同目标的任何替代方法可能是使用 Google 工具或其他一些工具,或者可能是其他文档的提供者?
关注 public link 的用户是匿名的。 Google docs api 不提供控制文档可访问性的接口,因此很可能根本无法获得有权访问该文档的用户
您只能访问您组织中用户的电子邮件地址,或者您明确与之共享文档的用户,或者明确授权您访问其身份的用户。安全政策不允许您访问其他不相关帐户的电子邮件地址。
对于允许您访问其电子邮件地址的用户,您可以使用 Apps 脚本安装一个 onOpen 触发器,它可以在用户访问文档时触发一个函数。您可以通过以下方式进行:
流量:
- 按照 these steps or programmatically. 手动安装
- 将以下函数复制到脚本编辑器并保存项目。此函数执行以下操作:(1) 使用 getActiveUser() 检索正在访问文档的用户的电子邮件,(2) 如果安全策略不允许访问,则将
user
设置为Not available
到用户的身份,(3) 检索具有特定 ID 的点差 sheet,以及 (4) 将用户和当前日期附加到您的 sheet.
onOpen
触发器
function onOpenTrigger() {
let user = Session.getActiveUser().getEmail();
if (!user) user = "Not available";
const sheet = SpreadsheetApp.openById("YOUR_SPREADSHEET_ID").getSheetByName("Sheet1"); // Spreadsheet ID and sheet name according to your preferences
sheet.appendRow([user, new Date()]);
}
执行此操作后,每次用户访问文档时,新行将附加到相应的传播sheet,包括电子邮件地址(或 Not available
如果您不允许访问那个)和当前日期。
其他账户:
为了从其他帐户中获取数据,您需要获得相应用户的明确同意。
选项 1.自定义菜单:
实现此目的的一个选项是使用 simple onOpen
trigger to create a custom menu,它可用于 运行 获取电子邮件地址的功能。在这种情况下,用户应在打开文档时单击自定义菜单,以检索访问信息。例如,请参阅此示例:
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu('Log user')
.addItem('Run script', 'addUserAccess')
.addToUi()
}
function addUserAccess(){
let user = Session.getActiveUser().getEmail();
if (!user) user = "Not available";
}
然后,您如何处理这些数据将取决于您的具体情况。您可以像前面的示例一样将此数据附加到您的传播sheet(但这需要传播sheet public),或者使用 PropertiesService 存储它,并且稍后将其导出到您喜欢的位置。
选项 2. 编辑器 add-on:
另一种选择是将您的脚本设为 add-on。有关详细信息,请参阅 Extending Google Docs with Add-ons and Editor add-on authorization。