salesforce零基礎學習(一百)Mobile Device Tracking

本篇參考:

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開啟並且設置相關必要的權限。本篇只拋磚引玉,詳情使用自行查看上面文檔。篇中有錯誤地方歡迎指出,有不懂歡迎留言。