本指南提供了向 Google Workspace Marketplace API 发出请求和从该 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}"
}