本指南通过提供 Google Workspace Marketplace API 的请求和响应示例,展示了如何获取 Google Workspace Marketplace 应用的安装和许可详细信息。
应用尚未安装
licenseNotification.list 请求
此请求会调用 licenseNotification.list
方法来检索特定应用的许可通知列表。
GET /appsmarket/v2/licenseNotification/{applicationId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/licenseNotification/{applicationId}
响应正文
由于应用尚未安装,因此对该请求的响应不包含任何许可通知。
{
"kind": "appsmarket#licenseNotificationList",
"nextPageToken": ""
}
应用是单独安装的
用户 user1@domain1.com 单独从 Google Workspace Marketplace 安装了应用。
licenseNotification.list 请求
此请求会调用 licenseNotification.list
方法,并检索用户已安装的应用的许可通知列表。
GET /appsmarket/v2/licenseNotification/{applicationId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/licenseNotification/{applicationId}
响应正文
由于 user1@domain1.com 安装了应用,因此响应包含一个许可通知。 由于为 user1@domain1.com 预配了新许可,因此许可通知中包含预配通知。
{
"kind": "appsmarket#licenseNotificationList",
"notifications": [
{
"kind": "appsmarket#licenseNotification",
"id": "{LICENSE_NOTIFICATION_ID}",
"applicationId": "{APPLICATION_ID}",
"customerId": "user1@domain1.com",
"timestamp": "1641318266998",
"provisions": [
{
"kind": "appsmarket#provisionNotification",
"editionId": "default_edition",
"seatCount": "1"
}
]
}
],
"nextPageToken": "{NEXT_PAGE_TOKEN}"
}
应用由管理员安装
domain1.com 的管理员为组织中的所有人安装了该应用。
userLicense.get 请求
此请求会调用 userLicense.get
方法来获取 user1@domain1.com 的许可状态,并确定该用户是否有权使用相应应用。
GET /appsmarket/v2/userLicense/{applicationId}/{userId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/userLicense/{applicationId}/user1@domain1.com
响应正文
由于 domain1.com 的管理员已安装该应用,因此响应会针对 user1@domain1.com 返回用户许可,其中 enabled
为 true
,表示 domain1.com 的网域管理员已为该网域激活该应用;state
为 ACTIVE
,表示 user1@domain1.com 拥有有效许可,应允许其使用该应用。
{
"kind": "appsmarket#userLicense",
"enabled": true,
"state": "ACTIVE",
"editionId": "default_edition",
"customerId": "user1@domain1.com",
"applicationId": "{APPLICATION_ID}",
"id": "{USER_LICENSE_ID}",
"userId": "user1@domain1.com"
}
customerLicense.get 请求
此请求会调用 customerLicense.get
方法来获取 domain1.com 的许可状态,以确定其是否具有应用访问权限。
GET /appsmarket/v2/customerLicense/{applicationId}/{customerId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/customerLicense/{applicationId}/domain1.com
响应正文
响应会返回 domain1.com 的客户许可,其中 state
为 ACTIVE
,表明客户拥有有效许可。
{
"kind": "appsmarket#customerLicense",
"id": "{CUSTOMER_LICENSE_ID}",
"applicationId": "{APPLICATION_ID}",
"customerId": "domain1.com",
"state": "ACTIVE",
"editions": [
{
"editionId": "default_edition",
"seatCount": -1
}
]
}
应用仅由管理员为特定用户的组织部门 (OU) 安装
现在,该应用仅由管理员为 user2@domain1.com 的 OU 安装。不再由管理员为组织中的所有人安装。
userLicense.get 请求
此请求会调用 userLicense.get
方法来获取 user3@domain1.com 的许可状态,并确定该用户是否有权使用相应应用。
GET /appsmarket/v2/userLicense/{applicationId}/{userId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/userLicense/{applicationId}/user3@domain1.com
响应正文
由于该应用仅由管理员为 user2@domain1.com 安装,因此响应会为 user3@domain1.com 返回用户许可,其中 enabled
为 false
,表示 domain1.com 的网域管理员尚未为该网域激活应用,而 state
为 ACTIVE
,表示用户拥有有效许可,应允许其使用应用。
{
"kind": "appsmarket#userLicense",
"enabled": false,
"state": "ACTIVE",
"editionId": "default_edition",
"customerId": "domain1.com",
"applicationId": "{APPLICATION_ID}",
"id": "{USER_LICENSE_ID}",
"userId": "user3@domain1.com"
}
userLicense.get 请求
此请求会调用 userLicense.get
方法来获取 user2@domain1.com 的许可状态,并确定该用户是否有权使用相应应用。
GET /appsmarket/v2/userLicense/{applicationId}/{userId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/userLicense/{applicationId}/user2@domain1.com
响应正文
由于应用仅由管理员为 user2@domain1.com 安装,因此响应会针对 user2@domain1.com 返回用户许可,其中 enabled
为 true
,state
为 ACTIVE
。
{
"kind": "appsmarket#userLicense",
"enabled": true,
"state": "ACTIVE",
"editionId": "default_edition",
"customerId": "domain1.com",
"applicationId": "{APPLICATION_ID}",
"id": "{USER_LICENSE_ID}",
"userId": "user2@domain1.com"
}
系统会为组织中的所有人删除相应应用
系统已为组织中的所有用户删除该应用。用户 user1@domain1.com 仍可访问该应用,因为他们之前单独安装了该应用。
userLicense.get 请求
此请求会调用 userLicense.get
方法来获取 user2@domain1.com 的许可状态,并确定该用户是否有权使用相应应用。
GET /appsmarket/v2/userLicense/{applicationId}/{userId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/userLicense/{applicationId}/user2@domain1.com
响应正文
由于该应用已针对组织中的所有用户删除,因此响应会针对 user2@domain1.com 返回一个用户许可,其中 enabled
为 false
,state
为 UNLICENSED
,这表示相应用户的网域管理员未为该用户分配应用席位。
{
"kind": "appsmarket#userLicense",
"enabled": false,
"state": "UNLICENSED",
"applicationId": "{APPLICATION_ID}",
"id": "{USER_LICENSE_ID}",
"userId": "user2@domain1.com"
}
userLicense.get 请求
此请求会调用 userLicense.get
方法来获取 user1@domain1.com 的许可状态,并确定该用户是否有权使用相应应用。
GET /appsmarket/v2/userLicense/{applicationId}/{userId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/userLicense/{applicationId}/user1@domain1.com
响应正文
由于 user1@domain1.com 之前单独安装了该应用,因此他们仍然有权使用该应用。响应会返回一个用户许可,其中 enabled
为 true
,state
为 ACTIVE
。
{
"kind": "appsmarket#userLicense",
"enabled": true,
"state": "ACTIVE",
"editionId": "default_edition",
"customerId": "user1@domain1.com",
"applicationId": "{APPLICATION_ID}",
"id": "{USER_LICENSE_ID}",
"userId": "user1@domain1.com"
}
上述所有操作的许可通知
licenseNotification.list 请求
对 licenseNotification.list
方法的请求会检索应用的所有许可通知。
GET /appsmarket/v2/licenseNotification/{applicationId}
curl -H "Authorization: Bearer {TOKEN}" https://appsmarket.googleapis.com/appsmarket/v2/licenseNotification/{applicationId}
响应正文
响应会返回一份许可通知列表,其中包含上述所有操作。
{
"kind": "appsmarket#licenseNotificationList",
"notifications": [
{
"kind": "appsmarket#licenseNotification",
"id": "{LICENSE_NOTIFICATION_ID}",
"applicationId": "{APPLICATION_ID}",
"customerId": "user1@domain1.com",
"timestamp": "1641318266998",
"provisions": [
{
"kind": "appsmarket#provisionNotification",
"editionId": "default_edition",
"seatCount": "1"
}
]
},
{
"kind": "appsmarket#licenseNotification",
"id": "{LICENSE_NOTIFICATION_ID}",
"applicationId": "{APPLICATION_ID}",
"customerId": "domain1.com",
"timestamp": "1641318351038",
"provisions": [
{
"kind": "appsmarket#provisionNotification",
"editionId": "default_edition",
"seatCount": "-1"
}
]
},
{
"kind": "appsmarket#licenseNotification",
"id": "{LICENSE_NOTIFICATION_ID}",
"applicationId": "{APPLICATION_ID}",
"customerId": "domain1.com",
"timestamp": "1641318858349",
"deletes": [
{
"kind": "appsmarket#deleteNotification",
"editionId": "default_edition",
}
]
},
],
"nextPageToken": "{NEXT_PAGE_TOKEN}"
}