LiaPengembang

Panduan

Sebuah ruangan dua pemain. Buat di server Anda, undang teman ke dalamnya dengan pemilih teman Lia atau tautan, dan bawa kedua pemain ke ruangan yang sama.

Ide: sebuah ruangan memiliki ID, dan ID itu masuk ke undangan's startParam. Siapa pun yang membuka undangan akan membuka aplikasi Anda dengan startParam tersebut, dan halaman Anda bergabung dengan mereka ke dalam ruangan. Lia'milik Lia XO bekerja dengan cara ini.

#1. Buat ruangan di server Anda

server.js
app.post("/api/rooms", async (req, res) => {
  const playerId = await playerFrom(req.body.session); // see Verify on your server
  if (!playerId) return res.status(401).end();
  const room = "room-" + crypto.randomUUID().replace(/-/g, "").slice(0, 10);
  await db.createRoom(room, { host: playerId, players: [playerId] });
  res.json({ room });
});

app.post("/api/rooms/join", async (req, res) => {
  const playerId = await playerFrom(req.body.session);
  if (!playerId) return res.status(401).end();
  const room = await db.room(req.body.room);
  if (!room) return res.status(404).json({ error: "no_room" });
  if (room.players.length >= 2 && !room.players.includes(playerId)) return res.status(409).json({ error: "full" });
  await db.addPlayer(req.body.room, playerId);
  res.json({ room: req.body.room });
});

ID ruangan harus sesuai dengan startParam: 1 hingga 64 huruf, angka, _ dan -.

#2. Undang teman

game.js
async function playWithAFriend() {
  const { room } = await api("/api/rooms", {});
  showWaiting(room);
  const { invited } = await Lia.inviteFriend({ startParam: room });
  if (!invited) Lia.toast("Share the link to invite someone");
}

// Or a link to send anywhere: opens your app in Lia, or the App Store without it.
async function shareRoom(room) {
  await Lia.share("Play with me: " + Lia.inviteLink(room));
}

Setiap teman yang dipilih mendapat kartu di chat Lia mereka. Lia hanya memungkinkan orang mengundang teman mereka, dan hanya teman yang dapat membuka aplikasi Anda (saat itu'di uji, hanya testermu).

#3. Masuk ke ruangan

Baca startParam saat aplikasi Anda dibuka, dan dengarkan satu yang tiba saat itu'dibuka (orang tersebut mengetuk undangan kedua):

function route(startParam) {
  if (startParam && startParam.startsWith("room-")) joinRoom(startParam);
}

Lia.init().then(function () {
  route(Lia.startParam);
  Lia.ready();
});
Lia.on("startParam", function (data) { route(data.startParam); });

async function joinRoom(room) {
  try {
    await api("/api/rooms/join", { room });
    openTable(room);
  } catch (error) {
    Lia.toast(error.message === "full" ? "That game is full" : "That game has ended");
  }
}

Sebuah startParam hanya sebuah petunjuk: siapa saja bisa membuat tautan dengan startParam apa pun, jadi server Anda menentukan apakah ruangan itu ada dan pemain bisa bergabung.

#4. Mainkan secara langsung

Hubungkan kedua pemain ke server Anda (biasanya WebSocket), dan verifikasi setiap pemain'sesi sebelum bergabung dengan ruangan. Saat permainan sedang berlangsung:

Lia.enableClosingConfirmation(); // "Leave the game?" if they close
Lia.disableVerticalSwipes();     // a swipe down won't close the sheet mid move
Lia.onPause(function () { socket.send(JSON.stringify({ type: "away" })); });
Lia.onResume(function () { socket.send(JSON.stringify({ type: "back" })); });

#5. Giliran Anda, melalui notifikasi

Ketika itu'seseorang'gerak dan mereka'telah keluar dari aplikasi kamu, sebuah pemberitahuan dengan ruangan sebagai startParam membawanya kembali langsung:

{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "@kofi played. Your move.", "startParam": "room-a81c2e09f4" }

#Tabel publik

Undangan adalah untuk teman. Untuk memungkinkan siapa pun di Lia bergabung, juga daftarkan ruangan di lobi sambil menunggu:

server.js
// When the room is made: list it (as the host, with one seat taken).
await lia("POST", "/lobby/tables", { tableId: room, hostPlayerId: playerId, seats: 2, taken: 1, title: "Quick game" });

// When someone joins from the lobby: seat them through Lia first (it refuses blocked players and full tables).
app.post("/api/rooms/sit", async (req, res) => {
  const playerId = await playerFrom(req.body.session);
  if (!playerId) return res.status(401).end();
  try {
    const { full } = await lia("POST", `/lobby/tables/${encodeURIComponent(req.body.room)}/sit`, { playerId });
    await db.addPlayer(req.body.room, playerId);
    if (full) startGame(req.body.room);
    res.json({ room: req.body.room });
  } catch (error) {
    res.status(409).json({ error: error.data?.error ?? "failed" }); // full, not_found, own_table
  }
});

// When the game starts or the room closes: take it out (safe to repeat).
await lia("DELETE", `/lobby/tables/${encodeURIComponent(room)}`);

Di halaman Anda, tampilkan tabel yang terbuka, dan dudukkan orang-orang yang memilih meja Anda dalam Lia'lobi sendiri (mereka tiba dengan startParam lobby-<table id>):

const { tables } = await Lia.lobby.tables();
renderTables(tables, (table) => api("/api/rooms/sit", { room: table.id }));

function route(startParam) {
  if (startParam?.startsWith("lobby-")) return api("/api/rooms/sit", { room: startParam.slice(6) }).then(openTable);
  if (startParam?.startsWith("room-")) return joinRoom(startParam);
}

Orang asing bisa'tidak chat melalui Lia, blok dihormati, dan pemain dapat laporan satu sama lain.

#Batasan yang perlu diketahui

  • Satu orang dapat mengundang 20 teman ke dalam aplikasi Anda sehari, sehingga undangan tetap sesuatu yang orang sukai di obrolan mereka.
  • Seorang host dapat memiliki 3 meja publik terbuka di aplikasi Anda pada saat yang sama, dan daftar berlangsung maksimal satu jam.
  • Lia.inviteFriend() jawaban { invited }, tidak pernah siapa yang diundang: server Anda belajar siapa yang bergabung ketika mereka bergabung.

Diterjemahkan otomatis. Bahasa Inggris adalah sumber kebenaran. Baca dalam Bahasa Inggris

Ketik untuk mencari setiap halaman, metode, dan titik akhir.