本篇參考:
Mobile Device Tracking (salesforce.com)
UserDevice | SOAP API Developer Guide | Salesforce Developers
背景:專案中有一個需求,當前登入的使用者,在手機裝置登入(要求指定的裝置)和在電腦裝置登入要有不同的驗證以及不同的跳轉以及既有的使用者登入的資訊。這個判斷的東西不可避免的要在 login flow來實現。那麼如何獲取指定裝置的資訊呢,這個時候就要用到 Mobile Device Management相關知識了。
一. 啟用 Mobile Device Tracking
Mobile Device使用的表有UserDevice以及 UserDeviceApplication。我們去自己的dev環境搜尋user發現並沒有這兩個表,原因是因為這個只能salesforce啟用,所以如果我們想嚐鮮,需要給salesforce提case,提供當前環境的Org Id讓他啟用即可。
如何檢視當前的Org Id,開啟Develop Console,輸入以下SOQL即可獲取到。
複製查詢出來的Id,在trailhead的help點選create case,提交一個case等待salesforce啟用即可。啟用以後的效果如下
我們點進去這個表,檢視一下這個表對應的標準的欄位,我們會發現欄位竟然沒有???真的沒有嗎???
當然不是,因為我們可能沒有許可權導致看不到。我們如果想看到或者管理Mobile Device,我們需要有以下的兩個許可權:View Devices & Manage Devices。
我們宣告一個 Permission Set,在 system setting中將 View Devices 以及 Manage Devices這兩個permission勾選上,然後assign給想要管理User Device的人。
我們授權以後繼續重新整理原來的頁面,已經擁有了訪問許可權。
需要注意的是,salesforce並不支援在develop console查詢 UserDevice的資料,所以我們需要通過vf 展示在classic或者aura / lwc展示在lex中。官方的demo中是使用visualforce page展示相關資訊。
二. 展示User Device資訊
所以問題來了,我們想檢視手機端登入狀況,可以直接有現成的UI去檢視嗎? 遺憾的是沒有的,salesforce支援通過API 或者apex查詢方式去獲取User Device資訊,如果我們想通過UI展示 User Device資訊,我們可以通過apex查詢,通過vf進行展示或者lwc / aura展示。下面的demo通過vf page展示(來源於官方demo)
1. classic使用vf展示資訊
DeviceWrapper.cls:根據UserDevice資訊封裝一個Wrapper,用於前臺展示
1 public class DeviceWrapper { 2 public String id{get; set;} 3 public String userName{get; set;} 4 public String deviceType{get; set;} 5 public String platformType{get; set;} 6 public String status{get; set;} 7 }
UserDeviceController.cls:搜尋UserDevice資訊
public class UserDeviceController { private final List<DeviceWrapper> devices; public String targetId{get;set;} public UserDeviceController() { targetId = ''; List<UserDevice> userDeviceList = [SELECT Id,User.Name,DeviceType,PlatformType,Status FROM UserDevice]; devices = new List<DeviceWrapper>(); for(UserDevice d : userDeviceList) { DeviceWrapper a = new DeviceWrapper(); a.id = d.id; a.userName = d.User.Name; a.deviceType = d.DeviceType; a.platformType = d.PlatformType; a.status = d.Status; devices.add(a); } } public List<DeviceWrapper> getDevice() { return devices; } }
UserDevicePage:展示 UserDevice資訊
<apex:page controller="UserDeviceController" lightningStylesheets="true"> <apex:sectionHeader title="Mobile Device Tracking"/> <apex:pageBlock> <apex:form > <apex:pageBlockTable value="{!device}" var="a"> <apex:column value="{!a.id}" headerValue="Device ID" /> <apex:column value="{!a.userName}" headerValue="User" /> <apex:column value="{!a.deviceType}" headerValue="Device Type" /> <apex:column value="{!a.platformType}" headerValue="Platform" /> <apex:column value="{!a.status}" headerValue="Status" /> </apex:pageBlockTable> </apex:form> </apex:pageBlock> </apex:page>
結果:我們最開始執行發現裡面一條資料沒有,原因是什麼呢? 因為 Mobile Device Tracking如果通過瀏覽器登入是不會生成記錄的,只有通過手機salesforce app進行登入,嘗試授權以後才會生成記錄。所以我們在自己的手機下載salesforce app,通過賬號密碼登入以後,在訪問頁面就會有記錄了。
我們可以看到,當前的記錄狀態是 Pending Approval。當一臺手機裝置嘗試登入以後,預設的狀態是 Pending Approval,我們可以通過 apex對這臺裝置進行狀態更改,比如更改成 Revoked(取消) / approved(通過)。
List<UserDevice> userDevices = new List<UserDevice>(); userDevices = [SELECT Id,Status FROM UserDevice]; for(UserDevice userDeviceItem : userDevices) { userDeviceItem.Status = 'Approved'; } update userDevices;
結果展示:狀態已經變成了 Approved。
同樣的, 當這個裝置不是我們授權的裝置,我們不希望他來竊取我們的公司資訊,作為管理員,我們需要將這個裝置設定成Revoked。
設定成Revoked以後我們繼續使用手機登入,發現手機登入仍然有效,所以我們肯定還要有額外的配置,如下所示。在setup 搜尋處搜尋 identity verification,勾選上紅框的配置即可。
我們再使用手機裝置進行登入,輸入賬號密碼以後,會提示無法從此裝置登入。
總結:Mobile Device Tracking是一個很好的東西,可以監控追蹤哪些手機裝置訪問你的資料,並且可以設定裝置是否允許訪問。使用時需要給salesforce support提case開啟並且設定相關必要的許可權。本篇只拋磚引玉,詳情使用自行檢視上面文件。篇中有錯誤地方歡迎指出,有不懂歡迎留言。