本指南提供了向 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 的组织部门安装了此应用。不再为组织中的所有人安装 Admin 工具。
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}"
}