部分專為企業設計的應用程式提供名為「受管理設定」的內建設定,IT 管理員可以從遠端進行設定。舉例來說,應用程式可以選擇只在裝置連上 Wi-Fi 時同步處理資料。所有「解決方案集」都必須提供 IT 管理員指定代管設定的功能,並套用至裝置。您可以透過以下兩種方式在 EMM 控制台支援受管理的設定:
- 建立自己的 UI,並透過 ApplicationPolicy 中的
managedConfiguration
套用設定。 - 將受管理的設定 iframe 新增至主控台 (操作說明請見下文),然後透過 ApplicationPolicy 中的
managedConfigurationTemplate
套用設定。
受管理設定 iframe 是可嵌入的 UI,可讓 IT 管理員儲存、編輯及刪除應用程式的受管理設定。舉例來說,您可以在開啟 iframe 的應用程式詳細資料或設定頁面中顯示按鈕 (或類似的 UI 元素)。
iframe 可供 IT 管理員執行的動作
![DCM iframe](https://developers.google.cn/static/android/work/play/emm-api/images/mcm_iframe.png?authuser=7&hl=zh-tw)
設定及儲存組態設定檔
iframe 會擷取並顯示特定應用程式的受管理設定結構定義。在 iframe 中,IT 管理員可以自行調整設定,並將結構定義儲存為設定設定檔。每次 IT 管理員儲存新的設定檔時,iframe 都會傳回名為 mcmId
的專屬 ID。
如此一來,IT 管理員就能為同一個應用程式建立多個設定檔。
編輯組態設定檔
iframe 可顯示已儲存的組態設定檔。IT 管理員可以更新設定檔內的設定,並儲存所做變更。
刪除組態設定檔
IT 管理員可以刪除 iframe 中的組態設定檔。這項功能預設為停用。
將 iframe 新增至控制台
產生網頁權杖
使用 enterprises.webTokens.create
產生用於識別企業的網頁權杖,並將 iframeFeature
設為 MANAGED_CONFIGURATIONS
。在控制台中顯示 iframe 時,您必須納入傳回的權杖以及其他參數。
顯示 iframe
以下範例說明如何顯示受管理設定 iframe:
<script src="https://apis.google.com/js/api.js"></script>
<div id="container" style="width: 1000px; height: 1000px"></div>
<script>
gapi.load('gapi.iframes', function() {
var options = {
'url': 'https://play.google.com/managed/mcm?token=web_token&packageName=app_package_name',
'where': document.getElementById('container'),
'attributes': { style: 'height:1000px', scrolling: 'yes'}
}
var iframe = gapi.iframes.getContext().openChild(options);
});
</script>
網址參數
下表列出 iframe 網址的所有可用參數。
參數 | 必要 | 說明 |
---|---|---|
token |
是 | 從 Enterprises.createWebToken 傳回的權杖。 |
packageName |
是 | 應用程式的產品 ID,例如 com.google.android.gm 。 |
mcmId |
否 | 受管理組態設定檔的 ID。 |
canDelete |
否 | 如果為 TRUE,請在 iframe 中啟用按鈕,讓 IT 管理員刪除受管理的設定設定檔。如果為 FALSE (預設值),代表按鈕已停用。 |
locale |
否 | 格式正確的 BCP 47 語言標記,用於將 iframe 中的內容本地化。如未指定,則預設值為 en_US。 |
iframe 事件
此外,您也應該在整合作業中處理下列事件。
活動 | 說明 |
---|---|
onconfigupdated |
使用者更新現有的受管理設定設定檔或建立新的設定檔。如此會傳回包含以下內容的物件:{ "mcmId": The ID of the managed configurations profile. "name": The name of the updated or newly created managed configurations profile. } |
onconfigdeleted |
使用者刪除現有的受管理設定設定檔。如此會傳回包含以下內容的物件:{ "mcmId": The ID of the managed configurations profile. } |
以下範例說明如何監聽 onconfigupdated
,範例如下:
iframe.register('onconfigupdated', function(event) {
console.log(event);
}, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);
應用程式的受管理設定結構定義更新
如果開發人員更新應用程式的受管理設定結構定義,已儲存的設定設定檔就會自動更新。舉例來說,如果開發人員移除某個選項,該選項將從應用程式的所有現有設定檔中移除。如果開發人員新增選項,選項的預設值 (由開發人員定義) 會加到應用程式的所有現有設定設定檔中。
將組態設定檔套用至政策
每個組態設定檔都會儲存為不重複的 mcmId
。如要將設定檔套用至政策,請在 managedConfigurationTemplate
中指定 mcmId
。
瞭解選取/取消選取行為
受管理的設定 iframe 可讓 IT 管理員在不需要時,明確取消選取受管理設定的應用程式限制。這項變更是變更之前的行為,可能會影響傳送至應用程式的限制 (視管理員選取的設定而定)。
下節將概述受管理設定 iframe 與這個新的取消選取模式會有哪些行為,以及開發人員可透過受管理設定傳送哪些內容。
使用應用程式限制的預設值
如果應用程式限制類型為 bool、choice、整數、複選或字串,且已提供預設值,當管理員儲存受管理設定時,如未對應用程式限制套用任何變更,系統就會套用預設值做為應用程式限制的值。
舉例來說,採用下列應用程式限制結構定義:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": false
}
}]
傳送至裝置的應用程式限制如下:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": false
}
}]
不使用應用程式限制的預設值
如果應用程式限制類型為 bool、choice、整數、複選或字串,但未以預設值提供,當管理員儲存受管理設定時,如未對應用程式限制套用任何變更,系統就不會納入這些應用程式限制。
舉例來說,採用下列應用程式限制結構定義:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool"
// defaultValue absent.
}]
傳送至裝置的應用程式限制如下:
"restrictions": [
// Empty
]
在結構定義中使用套裝組合
本節適用於套件應用程式限制:
在套件應用程式限制中,至少有一項含有預設值的兒童應用程式限制
如果在 Bundle 應用程式限制中,至少有一個子項應用程式限制類型為 bool、choice、整數、複選或 字串,且已提供預設值,則系統會套用預設值做為應用程式限制的值,而未設定預設值的管理員在儲存該應用程式限制時,系統便會將其排除。
"restrictions": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key_1",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": false
}
},
{
"key": "bool_key_2",
"restrictionType": "bool"
// defaultValue absent.
}
]
}]
傳送至裝置的應用程式限制如下:
"restrictions": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key_1",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": false
}
},
// The bool_key_2 child app restriction is not included.
]
}]
所有未採用預設值的兒童應用程式限制
如果在套裝組合應用程式限制所有子項應用程式限制,類型為 bool、choice、整數、複選或 字串,但未以預設值提供,那麼當管理員儲存受管理設定時,如未對應用程式限制套用任何變更,系統就不會納入套裝組合。
舉例來說,採用下列應用程式限制結構定義:
"restrictions": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key_1",
"restrictionType": "bool",
// defaultValue absent.
},
{
"key": "bool_key_2",
"restrictionType": "bool"
// defaultValue absent.
}
]
}]
傳送至裝置的應用程式限制如下:
"restrictions": [
// Empty
]
在結構定義中使用 bundle_array
本節適用於 bundle_array 應用程式限制。如果子項應用程式限制類型為 bool、choice、整數、複選或字串類型,則沒有預設值。
舉例來說,採用下列應用程式限制結構定義:
"restrictions": [{
"key": "bundle_array_key",
"restrictionType": "bundleArray",
"nestedRestriction": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": true
}
}]
}]
}]
在 bundle_array 應用程式限制中至少有一個 bundle 群組
如果設定了至少一個套裝組合群組,管理員儲存受管理設定時,系統就會納入 bundle_array 應用程式限制。
傳送至裝置的應用程式限制如下:
"restrictions": [{
"key": "bundle_array_key",
"restrictionType": "bundleArray",
"nestedRestriction": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": true
}
}]
}]
}]
如果儲存了限製或套裝組合群組,整個 bundle_array
中的所有限制/套裝組合將依下列優先順序設定:
- 管理員選擇的值
- 該組合/限制所列出的預設值。
- 如果沒有預設值,iFrame 中顯示的值
bundle_array 應用程式限制中沒有任何組合群組
如果管理員在沒有新增套裝組合群組的情況下儲存受管理設定,系統就不會納入 bundle_array 應用程式限制。傳送至裝置的應用程式限制如下:
"restrictions": [
// Empty
]