手机游戏手柄通信的原理是什么?

2019-09-02 13:01:04 +08:00
 FaiChou

比如这款游戏手柄「黄蜂背键版」, 可以点击映射到屏幕的某一点, 也可以进行复杂的宏录制来复合多个操作.

那么在 iOS 上的工作原理是什么样的呢?

首先先看「黄蜂电容版本」, https://zhuanlan.zhihu.com/p/45363782 这里有篇博客介绍了, 原理是:

飞智电容隔空映射技术,无需进行蓝牙连接,直接将手机插入手柄,通过操作不同的手柄按键即可实现模拟玩家触摸手机屏幕的操作,属于物理操控。

而「黄蜂背键版」则采用蓝牙进行传输, 而非物理操控, 想要使用手柄操控游戏还必须使用「游戏厅」来打开游戏, 那么问题来了:

  1. 为何需要「游戏厅」来打开的游戏才能做到手柄操控?
  2. 手柄点击 -> 蓝牙传输到手机 -> 手机将信号传给 「游戏厅」-> 游戏厅解析信号 -> 发送给游戏, 最后一步「游戏厅」是通过何种方式频繁给游戏发信号的? iOS 下是采用 URLScheme 吗?
  3. 如果游戏厅在后台使用 URL Scheme 频繁处理信号发送信号给游戏, 那么内存不足系统把游戏厅 app 给杀死, 那么手柄就不灵了吗? 这应该是很常见的吧?

5874 次点击
所在节点    程序员
25 条回复
FaiChou
2019-09-02 13:31:00 +08:00
目前收到两种解释:

1. 游戏里有一个开关, 通过 urlscheme 启动过来传参 通知 app 打开这份蓝牙协议, 之前在游戏厅里的配置 都是通过 scheme 传过来了, 游戏里自己解析
2. 蓝牙手柄根本不知道目前使用的游戏配置是哪一个, 但是在游戏厅 apply & run 的时候,游戏厅给手柄发送了对应的配置并且打开游戏, 这时候游戏和配置才对上, 手柄把处理好的信号直接发送给游戏, 所以受支持的游戏只需要支持一份公共的蓝牙协议就可以了.
FaiChou
2019-09-02 13:31:45 +08:00
但以上两种解释都是在猜测, 没有找到官方解释, 在 iOS 下不越狱也非常难以 debug 验证 囧
eGlhb2Jhb2Jhbw
2019-09-02 13:34:24 +08:00
你说的这个 Scheme 的原理是从哪里查出来的?

我一直以为是“游戏大厅”给游戏注入了一个动态库,用来 hook 屏幕操作的。
FaiChou
2019-09-02 13:35:46 +08:00
eGlhb2Jhb2Jhbw
2019-09-02 13:39:06 +08:00
@FaiChou #4 这我知道,但是怎么知道手柄是这样的实现,怎么知道游戏就有解析蓝牙手柄协议的 scheme 暴露出来,怎么知道游戏有哪些支持的协议,这些有什么规范吗?
FaiChou
2019-09-02 13:39:30 +08:00
@eGlhb2Jhb2Jhbw 「给游戏注入了一个动态库」这个方式会有安全隐患, 大多数游戏应该都不会支持此操作来被 hook 吧
justfindu
2019-09-02 13:40:14 +08:00
物理映射 触发屏幕
FaiChou
2019-09-02 13:41:18 +08:00
@eGlhb2Jhb2Jhbw 这些协议规范不像 js 查 ecma 那样容易找到, 所以除非联系手柄开发商或者游戏开发商, 否则在网上的资料很少, 个人也是比较好奇才研究下, 经过一系列搜索也是无果
FaiChou
2019-09-02 13:43:02 +08:00
@justfindu 手柄一代是通过物理映射的, 模拟用户点击 但第二代是蓝牙协议.. 不清楚原理
eGlhb2Jhb2Jhbw
2019-09-02 13:58:12 +08:00
@FaiChou #6 动态库注入是 iOS 系统层级的实现,App 层面如果不做特殊处理是很难防得住的,参考微商们用的 WX。
Sapp
2019-09-02 14:05:16 +08:00
@FaiChou 这个手柄我买过,物理的那一代也可以蓝牙,我就一直是蓝牙状态,因为物理链接的不好使
openbsd
2019-09-02 14:09:54 +08:00
@eGlhb2Jhb2Jhbw #10
汗手也关注过一段时间这个手柄,不敢确认 TM 对这个的态度没下手。感觉没有 注入 IOS 那么高级
如果能直接注入系统,就相当于物理挂了,为啥还要通过别的途径进入游戏 ?
eGlhb2Jhb2Jhbw
2019-09-02 14:25:10 +08:00
@openbsd #12 注入 App 和注入系统是两码事,如果只写一套动态库,可以挂载到不同的 App,成本就没你想的那么高。我理解的是因为需要注入动态库,所以给 App 脱壳了,为了避免证书问题,就把 App 也作为动态库,使用游戏大厅加载起来了。
当然,这个也只是我的猜测,没实际用过,不过看有些手柄的介绍,游戏里会有手柄的菜单,菜单里可以拖拽虚拟手柄的屏幕映射位置。这个菜单应该不是游戏自己做的,所以我才理解的是动态挂载了。
whileFalse
2019-09-02 14:38:03 +08:00
iOS 游戏厅里面的游戏应该是单独下载的特殊版本吧?
x86
2019-09-02 14:42:36 +08:00
我用黄蜂电容版用蓝牙模式被封了,现在切回电容模式很稳定...
binux
2019-09-02 14:44:04 +08:00
我猜通过游戏厅它能接管输入设备,根本不会是你想的那么麻烦
FaiChou
2019-09-02 14:49:56 +08:00
@whileFalse

不需要下载特殊版本游戏, 只需要点击 apply and play 就可以启动运行

https://tva1.sinaimg.cn/large/006y8mN6ly1g6l6ahjnbaj31120ku79o.jpg
huage2580
2019-09-02 15:49:37 +08:00
前竞品公司员工,飞智的电容版,行业目前是很难抄的,游戏也难检测;蓝牙版,大家都一样的技术,互相抄袭。我不负责 IOS 相关,只能说一些我知道的,1.逆向游戏植入 SDK(游戏每次更新都要重下,很耗我们的企业证书,经常封),2.越狱。游戏厅就个平台,主要是要引流下载我们的植入包;安卓端,最早也做逆向,后来逆向不做了,有更稳定的技术,1。shell 提权,2。多开;最后,正规的渠道,各种厂商合作,我们提供蓝牙 SDK;
腾讯的态度,先打压后谈合作。用户封号警告;这类行业都不好做,现在全看腾讯吃饭,它自己也搞手游外设助手之类的,看风向应该是你们按我标准做硬件,我内置,都给给我交保护费。
fvckDaybyte2
2019-09-02 15:51:18 +08:00
不是特殊版本怎么保证每个游戏的 URLScheme 都一样?应该不是这个原理
huage2580
2019-09-02 16:04:21 +08:00
@huage2580 对了,IOS 也能支持启动官方游戏,核心我就不了解,我知道暂时支持 64 位,不支持 A12 芯片;一样会检测封号。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597159

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX