眼下小游戲特別火,不少團隊也陸續(xù)啟動了微信小游戲的項目,并于立項前期進行技術(shù)預(yù)研究。但從微信官方文檔看 , 卻能發(fā)現(xiàn)不少坑。

一、運行環(huán)境的坑
首先微信小游戲是一個不同于瀏覽器的 JavaScript 運行環(huán)境,沒有 BOM 和 DOM API,所以我們第一個遇到的就是API兼容性問題。
1、API兼容性
1.1、網(wǎng)絡(luò)API
BOM的核心是windows,表示的是一個瀏覽器的實例,在網(wǎng)頁中自定義的任何一個對象、變量和函數(shù),都以windows作為其全局對象;缺乏Dom意味著http、websocket及本地存儲等通信用的API使用就會遇到問題,好在微信提供了這兩個API的私有實現(xiàn),我們要做的就是適配。
適配的基本思路是檢測是否是運行再微信平臺,然后利用JS動態(tài)語言特性, 對BOM的API進行動態(tài)重寫 , 優(yōu)缺點如下:
1.優(yōu)點是API調(diào)用者無需做任何改動,適配成本幾乎為0。對微信小游戲和瀏覽器之間的運行 環(huán)境差異無感知,非常友好。 2.缺點是會增加代碼體積,但代碼體積的增加帶來的損失幾乎可以忽略不計。
這種適配方案的性價比很高, 適配HTTP代碼示例如下:

1.2、微信的模塊化
微信小游戲提供了 CommonJS 風(fēng)格的模塊 API,可以通過 module.exports 和 exports 導(dǎo)出模塊,通過 require 引入模塊 . 這與瀏覽器引入JS文件的方式截然不同 , 中間有一個隔離層。
讓我們舉個例子來說明模塊化帶來的問題。
通常我們在瀏覽器上使用某個js文件里面自定義的類,通過

標(biāo)記引入JS文件可以直接使用:

但在微信中不可以這樣.需要把API都導(dǎo)入到一個對象上,使用時在加這個前綴.導(dǎo)致很多代碼需要修改,那么如何避免增加這個前綴呢?
針對這種情況 , 解決的思路是將所有外部需要用到的方法和對象動態(tài)掛靠到window對象上去,將上面的代碼稍做修改示例如下:

2、工作流變化
由于微信小游戲沒有Dom和Bom,所以很多依賴Dom和Bom的庫都不能直接用,比如 jquery。
微信的這套環(huán)境會或多或少會引起我們的工作流變化,使用第三方游戲開發(fā)引擎(比如Cocos Createor/Egret/Laya)可以彌補這些問題帶來的損失。
二、資源限制
1、每個小游戲允許上傳的代碼包總大小為 4MB。
解決方法1:壓縮js文件,圖片資源放在服務(wù)器上做預(yù)加載。 解決方法2:使用第三方引擎的資源管理功能。
2、微信小程序要求開發(fā)者的服務(wù)器 支持https,wss協(xié)議。
解決方案:服務(wù)器啟用HTTPS。實現(xiàn)的方式有很多,推薦Nginx反向代理。
三、發(fā)布審核
小游戲開發(fā)完成后發(fā)布上線需要具備如下的資格:
1: 服務(wù)器域名備案
2: https wss支持
3: 軟件著作權(quán)證書 復(fù)印件+蓋章簽名
4: 微信公眾平臺帳號及AppID
5: 開發(fā)者工具wechat_devtools_1.02.1803210_x64
6: 游戲自審報告復(fù)印件+簽名
7: iOS開發(fā)中帳號(可選,沒有則填空)
8: 游戲版號(開通微信支付需要)
9:企業(yè)開發(fā)者身份+對公帳號(開通微信支付需要)