取得應用程式安裝與授權詳細資料

本指南提供來自 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}"
}

應用程式是由管理員安裝

網域 1.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

回應主體

由於 1.com 網域已由管理員安裝應用程式,因此回應會傳回 user1@domain1.com 的使用者授權,其中 enabledtrue,表示 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 的客戶授權,其中 stateACTIVE,表示客戶擁有有效的授權。

{
  "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 的機構單位安裝應用程式。不再為機構中的所有人安裝此擴充功能。

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 的使用者授權,其中 enabledfalse,表示 domain1.com 的網域管理員尚未替這個網域啟用應用程式;stateACTIVE,表示使用者俱備有效的授權,且應獲準使用應用程式。

{
  "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 的使用者授權,其中 enabledtruestateACTIVE

{
  "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 的使用者授權,其中 enabledfalse,而 stateUNLICENSED,表示此使用者的網域的系統管理員並未指派應用程式名額給這位使用者。

{
  "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 先前已個別安裝該應用程式,因此使用者仍擁有使用權限。回應會傳回使用者授權,其中 enabledtrue,而 stateACTIVE

{
  "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}"
}