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