“看人下菜”,使用 PHP 判断用户终端环境返回不同的配置

开发小游戏的常规做法,在游戏启动后,会请求服务器一个配置文件,为了便于修改,一般会使用php动态文件。
这个php配置文件作用是很大的,除了定义一些不想硬编码的数值和参数,还可以随时开启和关闭游戏里面提前设定好的一些开关。(至于为什么要这么做,大家都懂的哈)

有些需求或特性,需要依赖客户端的环境来启用不同的配置,那么怎么来判断客户端环境呢?一般有3种方法:
1 定义在客户端的版本编号。
这个编号可以和服务端进行对应以保证功能的一致性,比如客户端这个版本修改了一个功能,如果连接服务器老的版本则会有问题,需要根据客户端版本号来判断去连接新的服务器版本或者传给服务器做逻辑。客户端版本号可以在每次编译版本时自动生成一串数字编号在代码里面,比如我们游戏定义了:
window.game_client_version = 2020051317554900; 会在请求php时会把这个参数传递过去。

2 平台api提供的系统信息。
如wx.getSystemInfoSync()里面包含的信息非常详细,有用户硬件型号、软件版本等等,都传递给服务器。

3 直接在服务器通过php获取一些信息。
比如 USER_AGENT、IP 等等。$_SERVER[‘HTTP_USER_AGENT’] 可以统计到这些信息:

//PC微信:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat
//安卓微信:
Mozilla/5.0 (Linux; Android 10; BLA-AL00 Build/HUAWEIBLA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36 MicroMessenger/7.0.13.1620(0x27000D13) Process/appbrand2 NetType/WIFI Language/zh_CN ABI/arm64 WeChat/arm64
//开发者工具:
Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Mobile Safari/537.36 wechatdevtools/1.02.1911082 MicroMessenger/7.0.4 webview/20000 gameservice port/27727 token/8325f7e4d4514cb251607e524ad5ac22
//IOS微信:
Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.12(0x17000c2d) NetType/WIFI Language/zh_CN

这样的话可以通过一些关键字来区分不同的平台处理特殊逻辑:
PC微信:“Windows WindowsWechat”,安卓微信:“Linux; Android”,IOS微信:“iPhone; CPU iPhone”

判断客户端操作系统

private function getOS() {
    $agent = $_SERVER['HTTP_USER_AGENT'];
    if (strpos($agent, 'iPhone') || strpos($agent, 'iPad'))
        return 1;
    if (strpos($agent, 'Android'))
        return 2;

    return 0;
}

如果有需要,服务器可以记录一些信息备查,通过以下代码记录信息写文件:
f i l e N a m e = " / d a t a / l o g " . d a t e ( " Y m d " , t i m e ( ) ) . " . t x t " ; f i l e p u t c o n t e n t s ( fileName = "/data/log_".date("Ymd", time()) .".txt"; file_put_contents( fileName="/data/log".date("Ymd",time()).".txt";fileputcontents(fileName, date(“Y-m-d H:i:s”, time()). “,” .$_SERVER[‘HTTP_USER_AGENT’] .PHP_EOL, FILE_APPEND);

最后,经验提醒:现在各大小游戏平台都是需要提审版本才能更新功能的,故游戏内尽可能提前规划好运营过程中可能变化的地方,用配置的形式在游戏启动时读取,以避免频繁修改客户端代码提审版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星之Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值