# شروع کار، قدم‌به‌قدم

> چه چیزهایی از تیم پلتفرم بگیرید، هر مقدار کجا استفاده می‌شود، و کل یکپارچه‌سازی در چند قدم کوتاه که هر کدام به جزئیاتش لینک دارد.

## ۱. کلیدها را بگیرید
تیم پلتفرم بازینس این مقدارها را به شما می‌دهد، **برای هر محیط یک دسته** (توسعه و اصلی):

| مقدار | مثال | چه کسی استفاده می‌کند | محرمانه؟ |
| --- | --- | --- | --- |
| **شناسه‌ی کلاینت** (client id) | `12` | سرور شما، برای گرفتن توکن کلاینت | نه، ولی خصوصی نگهش دارید |
| **کلید محرمانه** (client secret) | `••••••••` | سرور شما، برای گرفتن توکن کلاینت | **بله، فقط سرور** |
| **نام بسته‌ی پلتفرم** | `com.karizmastudio.example` | لینک همه‌ی صفحه‌های بازینس (`packageName`) | نه |
| **نام بازی** | `example` | صفحه‌ی جایزه و صفحه‌ی پیشنهاد (`game_name`) | نه |
| **نام بسته‌ی پرداخت** | `com.karizmastudio.example` | همه‌ی درخواست‌های پرداخت (`pname`)؛ ممکن است با نام بسته‌ی پلتفرم فرق کند | نه |
| **SKUها** | `example_pack` | محصولاتی که با پرداخت بازینس می‌فروشید | نه |

> [!WARNING]
> کلید محرمانه **هیچ‌وقت** نباید به مرورگر یا بیلد اپ برسد: نه در کد کلاینت، نه در متغیرهای `VITE_*` یا `NEXT_PUBLIC_*`، نه در گیت. هر کسی که آن را داشته باشد می‌تواند به نام بازی شما بازیکن بسازد و **گیتا کوین بدهد**.

## ۲. دو نوع توکن را بشناسید
همه‌چیز در پلتفرم با یکی از این دو توکن کار می‌کند. جدا نگه داشتن این دو، کلید کل یکپارچه‌سازی است:

| توکن | چه کسی دارد | چطور گرفته می‌شود | برای چه |
| --- | --- | --- | --- |
| **توکن کلاینت** | **فقط سرور شما** | شناسه + کلید محرمانه ← [`client/auth`](platform-api.md#step-1-get-a-client-token) | همه‌ی درخواست‌های سرور به سرور: ساختن بازیکن، بررسی توکن، دادن سکه |
| **توکن کاربر** | کلاینت بازیکن (از سرور شما) | [`client/create-user`](platform-api.md#step-2-create-a-baziness-user-for-a-player) یا [`client/get-user-token`](platform-api.md#step-3-get-a-fresh-user-token) | باز کردن صفحه‌های بازینس به نام همین بازیکن (`linkedToken`) و خواندن موجودی سکه‌اش |

## ۳. قدم‌ها را دنبال کنید
| # | قدم | کجا | جزئیات |
| --- | --- | --- | --- |
| ۱ | سرور شما با شناسه و کلید محرمانه یک **توکن کلاینت** می‌گیرد | سرور | [API پلتفرم ← قدم ۱](platform-api.md#step-1-get-a-client-token) |
| ۲ | اولین باری که بازیکن می‌آید، سرور **کاربر بازینس او را می‌سازد** و شناسه‌اش را ذخیره می‌کند. دفعه‌های بعد **توکن تازه** می‌گیرد | سرور | [قدم‌های ۲ و ۳](platform-api.md#step-2-create-a-baziness-user-for-a-player) |
| ۳ | کلاینت **صفحه‌های بازینس** (ورود، پروفایل، جایزه) را با توکن کاربر نشان می‌دهد و به پیام‌هایشان گوش می‌دهد | کلاینت | [صفحه‌های بازینس](pages.md) |
| ۴ | وقتی بازیکن در صفحه وارد شد، سرور **توکن را بررسی می‌کند** و حساب را وصل می‌کند (یا به حساب دیگر بازیکن جابه‌جا می‌کند) | سرور | [ورود](login.md)، [قدم ۴](platform-api.md#step-4-verify-a-token-from-the-client) |
| ۵ | کلاینت **موجودی گیتا کوین** را نشان می‌دهد و سرور برای برد و جایزه **گیتا کوین می‌دهد** | هر دو | [گیتا کوین](coins.md)، [قدم‌های ۵ و ۶](platform-api.md#step-5-give-gita-coins) |
| ۶ | دکمه‌ی «انتخاب جایزه» **صفحه‌ی جایزه** را باز می‌کند؛ آموزش می‌تواند **صفحه‌ی پیشنهاد** بازی را باز کند | کلاینت | [صفحه‌ی جایزه](rewards.md)، [صفحه‌ی پیشنهاد آموزش](game-offer.md) |
| ۷ | آیتم‌ها را با **پرداخت بازینس** بفروشید | هر دو | [پرداخت بازینس](pay-api.md) |
| ۸ | لینک‌هایی را که بازیکن می‌آورند با **پارامترهای UTM** برچسب بزنید | هر دو | [لینک‌ها و UTM](links.md) |

کد آماده‌ی همه‌ی قدم‌ها در [کد سرور](samples-server.md) و [کد کلاینت](samples-client.md) است. [بازی نمونه](example.md) همه را کنار هم دارد.

## ۴. سرور را تنظیم کنید
بازی نمونه و نمونه کدها این تنظیمات را می‌خوانند. همین نام‌ها را نگه دارید تا نمونه‌ها بدون تغییر کار کنند:

| تنظیم | مثال | معنی |
| --- | --- | --- |
| `BAZINESS_PLATFORM_ENABLED` | `true` | کلید اصلی. تا وقتی `false` است بازی هیچ بخش بازینسی نشان نمی‌دهد |
| `BAZINESS_PLATFORM_USE_PRODUCTION` | `false` | `false` = آدرس‌های توسعه، `true` = آدرس‌های اصلی |
| `BAZINESS_CLIENT_ID` | `12` | شناسه‌ی کلاینت |
| `BAZINESS_CLIENT_SECRET` | `••••` | کلید محرمانه (**محرمانه**) |
| `BAZINESS_PLATFORM_PACKAGE_NAME` | `com.karizmastudio.example` | `packageName` در لینک صفحه‌ها |
| `BAZINESS_GAME_NAME` | `example` | `game_name` در صفحه‌ی جایزه و پیشنهاد |
| `BAZINESS_PAY_ENABLED` | `true` | دکمه‌های خرید را روشن می‌کند |
| `BAZINESS_PAY_BASE_URL` | `https://pay-dev.karizmastudios.org` | سرور پرداخت این محیط |
| `BAZINESS_PAY_PACKAGE_NAME` | `com.karizmastudio.example` | `pname` در همه‌ی درخواست‌های پرداخت |
| `BAZINESS_SKU_PREFIX` | *(خالی)* | اختیاری: SKU = پیشوند + شناسه‌ی محصول |

پلتفرم فقط وقتی **روشن** حساب می‌شود که `BAZINESS_PLATFORM_ENABLED=true` باشد **و** هم شناسه و هم کلید محرمانه تنظیم شده باشند. به این ترتیب سروری که نیمه‌کاره تنظیم شده، دقیقاً مثل وقتی رفتار می‌کند که بازینس اصلاً وجود ندارد.
