“看人下菜”,使用 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”

如果有需要,服務器可以記錄一些信息備查,通過以下代碼記錄信息寫文件:
fileName="/data/log".date("Ymd",time()).".txt";fileputcontents(fileName = "/data/log_".date("Ymd", time()) .".txt"; file_put_contents(fileName, date(“Y-m-d H:i:s”, time()). “,” .$_SERVER[‘HTTP_USER_AGENT’] .PHP_EOL, FILE_APPEND);

最後,經驗提醒:現在各大小遊戲平臺都是需要提審版本才能更新功能的,故遊戲內儘可能提前規劃好運營過程中可能變化的地方,用配置的形式在遊戲啓動時讀取,以避免頻繁修改客戶端代碼提審版本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章