講師開場,學員掃碼加入
同一場次、同一題目、同一個大螢幕
講師選模式與題數,投影畫面顯示 QR Code、紅藍隊名單、目前題目與比分。學員手機只要輸入名字,就會自動分隊並參與搶答。
Firebase 設定
貼上 Firebase Web app config
為了避免 GitHub Secret Scanning 警示,網站不再內建 API key。講師第一次開場前,請貼上 Firebase 專案設定中的 Web app config,設定只會存於這台瀏覽器,QR Code 會在本機產生,不會把完整房間網址送到 QR 代碼第三方服務。
Realtime Database 規則建議:
{
"rules": {
"rooms": {
"$room": {
".read": "auth != null",
".write": "!data.exists() && auth != null && newData.child('hostUid').val() == auth.uid",
"players": {
"$uid": {
".write": "auth != null && auth.uid == $uid"
}
},
"status": { ".write": "auth != null && data.parent().child('hostUid').val() == auth.uid" },
"index": { ".write": "auth != null && data.parent().child('hostUid').val() == auth.uid" },
"scores": { ".write": "auth != null && data.parent().child('hostUid').val() == auth.uid" },
"order": { ".write": "auth != null && data.parent().child('hostUid').val() == auth.uid" },
"buzz": { ".write": "auth != null && (auth.uid == data.parent().child('hostUid').val() || (!data.exists() && newData.child('uid').val() == auth.uid))" },
"answer": { ".write": "auth != null && (auth.uid == data.parent().child('hostUid').val() || (newData.child('uid').val() == auth.uid && data.parent().child('buzz').child('uid').val() == auth.uid))" }
}
}
}
}紅隊0
藍隊0
等待講師建立場次
學員掃描 QR Code 後,名字會出現在隊伍名單。
尚未搶答
紅隊隊員
藍隊隊員
學員進場