本指南提供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 先前已個別安裝應用程式,因此仍有權使用。回應會傳回 user license,其中 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}"
}