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 ...
随机推荐
- pytorch实现 | Deformable Convolutional Networks | CVPR | 2017
文章转载自微信公众号:[机器学习炼丹术],请支持原创. 这一篇文章,来讲解一下可变卷积的代码实现逻辑和可视化效果.全部基于python,没有C++.大部分代码来自:https://github.com ...
- Elasticsearch 学习二(请求流程).
一.写入数据 1.ES 的任意节点都可以作为协调(Coordinating)节点接受请求(包括新建.索引或者删除请求),每个节点都知道集群中任一文档位置: 2.协调节点会通过 routing 字段计算 ...
- 6 个例子教你重构 Python 代码
1. 合并嵌套的 if 条件 太多的嵌套会使代码难以理解,这在 Python 中尤为如此,因为 Python 没有括号来帮助区隔不同的嵌套级别. 阅读深度嵌套的代码容易让人烦躁,因为你必须理清哪些条件 ...
- Java 面向对象概述
本文部分摘自 On Java 8 面向对象编程 在提及面向对象时,不得不提到另一个概念:抽象.编程的最终目的是为了解决某个问题,问题的复杂度直接取决于抽象的类型和质量.早期的汇编语言通过对底层机器作轻 ...
- 前端技术VUE 的前世今生从PC 走向移动
一.Vue的前世 Vue 框架诞生于2014年,他的作者为中国人–尤雨溪(江苏无锡人).Vue用于构建交互式的Web界面的库,是一个构建数据驱动的Web界面渐进式框架,该框架遵循CMD规范,并且提供的 ...
- SpringBoot整合任务调度框架Quartz及持久化配置
目录 本篇要点 SpringBoot与Quartz单机版快速整合 引入依赖 创建Job 调度器Scheduler绑定 自动配置,这里演示SimpleScheduleBuilder 手动配置,这里演示C ...
- [LeetCode]80. Remove Duplicates from Sorted Array II删除数组中的重复值
和第一题不同的地方是,容忍两次重复 虽然题目上说只需要长度,但是否检测的时候如果数组不跟着改变也是不行的 没说清楚题意 自己是用双指针做的,看了大神的答案更简单 public int removeDu ...
- 【NC基础操作】开发环境配置初体验
当我们拿到开发工具UAP-STUDIO-6.5.0.2和Home文件的时候,意味着我们可以用这两样东西开始进行项目开发了(默认其他准备已就绪). 运行UAP-STUDIO-6.5.0.2 双击进入&q ...
- redis系列:分布式锁
redis系列:分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...
- java并发包工具(java.util.Concurrent)
一.CyclicBarrier 作用:所有线程准备好才进行,只要一条线程没准备好,都不进行 用法:所有线程准备好以后调用CyclicBarrier的await方法,然后主线程执行CyclicBarri ...