# صفحه‌های بازینس و پیام‌هایشان

> صفحه‌های وبی که بازی شما داخل خودش نشان می‌دهد (ورود، پروفایل، فروشگاه جایزه و صفحه‌ی پیشنهاد بازی)، پارامترهایی که هر کدام لازم دارد و پیام‌هایی که برمی‌گردانند.

## این صفحه‌ها چه هستند
بعضی بخش‌های بازینس **صفحه‌ی وب** هستند که بازی شما **داخل خودش** نشان می‌دهد؛ مثلاً صفحه‌ی ورود و فروشگاه جایزه‌ی «انتخاب جایزه». آدرس صفحه را در یک وب‌ویوی داخل بازی باز می‌کنید: روی وب یک `iframe`، در موتور بازی یک کامپوننت WebView. صفحه با **پیام** با بازی حرف می‌زند، مثلاً «بازیکن وارد شد» یا «مرا ببند».

همه‌ی صفحه‌ها روی یک سایت هستند:

| محیط | آدرس پایه‌ی صفحه‌ها `{web}` |
| --- | --- |
| توسعه | `https://platform-web-dev.karizmastudios.org` |
| اصلی | `https://baziness.com` |

ساختن نمای داخل بازی (شیتی که از پایین بالا می‌آید و با کشیدن به پایین بسته می‌شود) در [شیت پایین / وب‌ویو](bottom-sheet.md) آمده است.

## پارامترها
> [!IMPORTANT]
> `linkCode` (کد یک‌بارمصرف از سرور شما با `v2/client/link-code/{userId}`) جای `linkedToken` را می‌گیرد. در دوره‌ی مهاجرت صفحه‌ها هر دو را قبول می‌کنند. [مهاجرت توکن](token-migration.md#platform-link-code) را ببینید.

| پارامتر | کِی | مقدار | چرا |
| --- | --- | --- | --- |
| `packageName` | **همیشه** | نام بسته‌ی پلتفرم شما | بازی شما را معرفی می‌کند |
| `sdkType` | **همیشه** | `js` | به صفحه می‌گوید داخل بازی است تا برایتان پیام بفرستد. بدون آن حتی دکمه‌ی بستن خود صفحه هم نمای شما را نمی‌بندد |
| `linkedToken` | هر وقت دارید | **توکن کاربر** بازیکن | صفحه به نام **همین** بازیکن کار می‌کند و ورود داخل صفحه به او وصل می‌شود |
| `redirect` | پروفایل، جایزه | `profile` / `shop` | صفحه بعد از ورود داخلش به کجا برگردد |
| `allowGuest` | ورود، پروفایل، پیشنهاد بازی | `false` | «ادامه به عنوان مهمان» خود صفحه را پنهان می‌کند؛ بازی شما این گزینه را دارد |
| `game_name` | جایزه، پیشنهاد بازی | نام بازی شما، URL-encode شده | جایزه‌ها و پیشنهاد بازی شما را انتخاب می‌کند |
| `buildStore` | فقط بیلدهای فروشگاهی | `CafeBazaar` / `Myket` | صفحه لینک فروشگاه‌های دیگر را پنهان می‌کند |

همه‌ی مقدارها را encode کنید، چون `game_name` ممکن است فارسی باشد و توکن‌ها ممکن است `+` یا `/` داشته باشند.

## صفحه‌ها
| صفحه | مسیر | کِی بازش کنید | پارامترها |
| --- | --- | --- | --- |
| **ورود** | `/` | بازیکن «ورود با حساب بازینس» را می‌زند، یا برای دریافت جایزه باید وارد شود | `packageName`، `sdkType=js`، `linkedToken`، `allowGuest=false` |
| **پروفایل** | `/profile` | تنظیمات ← اتصال یا مدیریت حساب | `packageName`، `sdkType=js`، `linkedToken`، `redirect=profile`، `allowGuest=false` |
| **فروشگاه جایزه «انتخاب جایزه»** | `/shop` | بازیکن دکمه‌ی جایزه را می‌زند | `game_name`، `packageName`، `sdkType=js`، `linkedToken`، `redirect=shop`؛ **بدون** `allowGuest` |
| **پیشنهاد بازی** | `/game-offer` | یک بار، وسط آموزش ([جزئیات](game-offer.md)) | `game_name`، `packageName`، `sdkType=js`، `linkedToken`، `allowGuest=false` |

```text
Login        https://baziness.com/?packageName=com.karizmastudio.example&sdkType=js&linkedToken=eyJ…&allowGuest=false
Profile      https://baziness.com/profile?packageName=com.karizmastudio.example&sdkType=js&linkedToken=eyJ…&redirect=profile&allowGuest=false
Rewards      https://baziness.com/shop?game_name=example&packageName=com.karizmastudio.example&sdkType=js&linkedToken=eyJ…&redirect=shop
Game offer   https://baziness.com/game-offer?game_name=example&packageName=com.karizmastudio.example&sdkType=js&linkedToken=eyJ…&allowGuest=false
```

> [!IMPORTANT]
> برای فروشگاه جایزه **`/shop`** را باز کنید، نه ریشه‌ی سایت (`/`). ریشه بازیکنی را که داخل بازی است به صفحه‌ی ورود می‌برد؛ `/shop` از توکنی که بازیکن دارد استفاده می‌کند.

## پیام‌های صفحه‌ها
صفحه با `postMessage` پیام می‌فرستد. هر پیام JSON است، به شکل رشته یا شیء، با قالب `{ "type": "...", "data": ... }`:

| `type` | `data` | معنی | کار بازی شما |
| --- | --- | --- | --- |
| `close` | — | دکمه‌ی بستن صفحه زده شد | نما را ببندید |
| `login` | توکن: `"<token>"` یا `{ "token": "<token>" }` | بازیکن وارد یک حساب شد | توکن را به **سرور خودتان** بفرستید تا [بررسی‌اش کند](platform-api.md#step-4-verify-a-token-from-the-client) و حساب را وصل کند یا به حساب دیگر بازیکن جابه‌جا شود؛ بعد توکن را تازه کنید و نما را ببندید |
| `login` | *(بدون داده)* | حساب فعلی بازیکن در همان جا وصل شد | بازیکن را متصل علامت بزنید و توکن را تازه کنید |
| `token` | توکن | دست‌دادن بی‌صدایی که صفحه هنگام بارگذاری می‌فرستد | **نادیده بگیرید**؛ ورود نیست |
| `logout` | — | بازیکن داخل صفحه خارج شد | نما را ببندید، هر چه بازی به‌صورت محلی ذخیره کرده پاک کنید و مثل یک بازدیدکننده‌ی کاملاً جدید از اول شروع کنید |

> [!WARNING]
> - فقط پیام‌هایی را بپذیرید که origin آن‌ها صفحه‌ای است که باز کرده‌اید (`{web}`) و بقیه را نادیده بگیرید.
> - هیچ‌وقت `token` را ورود حساب نکنید؛ وگرنه فروشگاه جایزه به محض باز شدن بسته می‌شود.
