IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 2021-08-30 -> 正文阅读

[移动开发]2021-08-30

iOS云真机操作经验分享


前言

远程办公作为疫情常态化下的热门词汇,催生了各种远程办公,远程会议等工具.远程操作一台PC已经不是什么难事,那么如何远程操作一台iOS手机呢?
iOS 云真机的几个痛点:
1.图像传输
2.真机操作
3.键盘输入文本



一、图像传输

图像传输是一切远程的基础,那么假设一台远程的iOS设备在机房内,如何在家中看到这台手机的图像呢?答案有很多,最简单的实现依赖于WebdriverAgent(WDA)。是的,WDA是iOS远程真机的基础,图像,操作等等一切都可以依赖于WDA进行实现。市面上你能找到的云真机厂商都在使用自己修改过WDA,笔者作为一名云平台的开发者,几年前也修改过WDA的源码。但是随着WDA的迭代更新,使用原版的WDA也能完美的满足云真机的功能实现。当然,后面有些功能我们使用了WDA,但也没用WDA,这里后续会做详细的解释。此处只介绍图像传输部分。

首先,在WDA启动参数中添加MJPEG_SERVER_PORT = 10872,当然端口可以随意指定。
然后使用iproxy转发一下端口,接着用浏览器打开localhost:10872,图像就出来了,EZ。

在这里插入图片描述

高清不卡,帧率,压缩比,清晰度都可以通过WDA进行实时调整,既然图像流已经通过WDA拿到了,剩下的转发就很简单了,这里就不做过的的解释了。

二、真机操作

远程真机能看到图像只是第一步,下一步需要将用户在浏览器上的操作同步到iOS手机上,点击,滑动,HOME键等都可以用WDA实现,但真正用起来你会发现,WDA的反应真的慢,一个滑动翻页的操作,通过WDA封装过的接口/wda/dragfromtoforduration"实现的话,可能要1-3秒才能完成,那么有没有更快的办法呢?
当年因为这个问题,我们也修改过WDA的源码,但是随着WDA和苹果接口的迭代,慢慢的有些API不再允许使用了,直到我找到了WDA中直接调用W3C的接口,当然这部分在WDA 中没有过多的文档进行说明,所以主要需要参照W3C的文档实现。

https://www.w3.org/TR/webdriver/#perform-actions
https://github.com/jlipps/simple-wd-spec#perform-actions

调用WDA的Actions接口,我们可以直接通过W3C实现滑动,点击等动作,相比于WDA乌龟速度能提升一个档次。当然要实现多指的操作也是可以的,只不过对于浏览器用户来说此功能过于鸡肋,我们的产品并没有做,不知道开发此功能的某厂商的产品经理是如何思考的

举个例子:从屏幕上的x:100,y:100作为起点,向左滑动50
URL: “http://localhost:” + WDAPort+ “/session/” + sessionID + “/actions”
参数:

 {
   "actions": [
     {
       "type": "pointer",
       "id": "finger1",
       "parameters": {"pointerType": "touch"},
       "actions": [
         {"type": "pointerMove", "duration": 0, "x": 100, "y": 100},
         {"type": "pointerDown"},
         {"type": "pause", "duration": 100},
         {"type": "pointerMove", "duration": 200, "origin": "pointer", "x": -50, "y": 0},
         {"type": "pointerUp"}
       ]
     }
   ]
 }

第一个动作pointerMove作为起点移动光标,第二个动作为pointerDown将光标落下,pause为停留时间,下一个pointerMove中"origin": "pointer"指定当前光标位置为此次移动的起点(不指定的话会以0,0为起点),指定后x,y的数值为相对移动的数值。duration为间隔时间可自行调整,最后pointerUp抬起光标,完成动作。

三、键盘输入

图像有了,点击、滑动也能模拟了,那么用户需要输入文本内容怎么办,一下一下在键盘上点太繁琐了,最简单的暴力的就是直接通过键盘输入,WDA提供了时间键盘输入的接口,只不过很难找到相关的文档和介绍。
URL:“http://localhost:” + WDAport+ “/session/” + sessionID + "/wda/keys"
参数的话就是value和frequency两个,VALUE是内容,frequency是次数默认使用1就可以了

实现后你会发现效果并不理想,首先输入的效率很低,如果连续依次输入123456,很有可能输入的124365,顺序会错乱,另外如果输入的是一串中文的话,实际的效果会是一个字一个字的输。效率很低,目前市面上多数的云真机厂商所实现的iOS云真机的输入功能都没有达到和安卓设备同样的流畅度。主要是因为iOS并不像安卓那样可以随意的开发一个键盘应用放到手机里直接用。那么如何实现如安卓般丝滑的输入呢?
有的,依然是依靠W3C的actions

URL: “http://localhost:” + WDAPort+ “/session/” + sessionID + “/actions”
参数:

 {
   "actions": [
     {
       "type": "key",
       "id": "keyboard",
       "actions": [
         {"type": "keyDown", "value": "a"},
         {"type": "keyUp", "value": "a"}
       ]
     }
   ]
 }

速度直接提升一个档次,缺点是每次只能输入一个字符,如果是一串中文的话需要循环调一下,不过还是比WDA的接口快很多,而且顺序不会错乱。


总结

笔者来自东软平台产品事业部:https://platform.neusoft.com/
UTF云测试平台产品:https://platform.neusoft.com/allproducts/utf-web
欢迎喜欢云真机的小伙伴一起交流相关技术
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:02:26  更:2021-09-01 12:02:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/23 2:43:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码