本篇參考:api
Mobile Device Tracking (salesforce.com)瀏覽器
UserDevice | SOAP API Developer Guide | Salesforce Developersapp
背景:項目中有一個需求,當前登陸的用戶,在手機設備登陸(要求指定的設備)和在電腦設備登陸要有不一樣的驗證以及不一樣的跳轉以及既有的用戶登陸的信息。這個判斷的東西不可避免的要在 login flow來實現。那麼如何獲取指定設備的信息呢,這個時候就要用到 Mobile Device Management相關知識了。ide
一. 啓用 Mobile Device Trackingui
Mobile Device使用的表有UserDevice以及 UserDeviceApplication。咱們去本身的dev環境搜索user發現並無這兩個表,緣由是由於這個只能salesforce啓用,因此若是咱們想嚐鮮,須要給salesforce提case,提供當前環境的Org Id讓他啓用便可。spa
如何查看當前的Org Id,打開Develop Console,輸入如下SOQL便可獲取到。3d
複製查詢出來的Id,在trailhead的help點擊create case,提交一個case等待salesforce啓用便可。啓用之後的效果以下code
咱們點進去這個表,查看一下這個表對應的標準的字段,咱們會發現字段居然沒有???真的沒有嗎???orm
固然不是,由於咱們可能沒有權限致使看不到。咱們若是想看到或者管理Mobile Device,咱們須要有如下的兩個權限:View Devices & Manage Devices。htm
咱們聲明一個 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開啓而且設置相關必要的權限。本篇只拋磚引玉,詳情使用自行查看上面文檔。篇中有錯誤地方歡迎指出,有不懂歡迎留言。