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开启并且设置相关必要的权限。本篇只抛砖引玉,详情使用自行查看上面文档。篇中有错误地方欢迎指出,有不懂欢迎留言。
salesforce零基础学习(一百)Mobile Device Tracking的更多相关文章
- salesforce零基础学习(一百零五)Change Data Capture
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.232.0.api_streaming.meta/api_streaming/using ...
- salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_class_Auth ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现
项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法
看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...
- salesforce零基础学习(九十六)Platform Event浅谈
本篇参考:https://developer.salesforce.com/blogs/2018/07/which-streaming-event-do-i-use.html https://trai ...
随机推荐
- [日常摸鱼]loj6000「网络流 24 题」搭配飞行员
题面 应该是二分图匹配,不过我写的是网络最大流. dinic求二分图最大匹配:加个源点和汇点,源点连向二分图的一边所有点,二分图的另一边所有点连向汇点,很明显这样得到的最大流就是这个二分图的最大匹配. ...
- Flink集群监控
prometheus+grafana 监控hadoop.yarn https://blog.csdn.net/c275090933/article/details/82108014 Prometheu ...
- Swift3.0学习之基础部分
1.常量和变量 常量和变量把一个名字(比如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个指定类型的值(比如数字 10 或者字符串 " ...
- Java发送企业微信应用消息
1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...
- 后台返回的json数据,前台需要修改对象的键值名,重新修改数据格式
//例如,后台返回的数据为: var json = { data: [ {value: 103.95, name: "法拉利"}, {value: 103.2, name: & ...
- [数据库]000 - 🍳Sysbench 数据库压力测试工具
000 - Sysbench 数据库压力测试工具 sysbench 是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有 ...
- Android硬件访问服务中的HAL-查看打印的信息
JNI 向上提供本地函数,向下加载HAL文件并调用HAL的函数 HAL 负责访问驱动程序执行硬件操作. external\chromium_org\third_party\hwcplus\src\h ...
- Javaweb前台界面代码复用总结
servlet声明定义message信息传给前天界面判断输出message: if(booknamelist.size()==0) { message="根据书名查询没有结果!"; ...
- SpringBoot全局异常拦截
SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...
- IDEA中配置Git,在Github上clone项目到IDEA
一.安装git 1.用homebrew安装git 运行以下命令安装 brew install git 默认的安装位置是 /usr/local/Cellar目录中(后面会用到) 二.在idea中配置Gi ...