本篇参考:

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开启并且设置相关必要的权限。本篇只抛砖引玉,详情使用自行查看上面文档。篇中有错误地方欢迎指出,有不懂欢迎留言。

版权声明:本文为zero-zyq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zero-zyq/p/14321236.html