> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qwacks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# إشعارات اللعبة

> أرسل رسائل إلى لاعبيك — صندوق الوارد داخل اللعبة، أو البريد الإلكتروني، أو الإشعارات الفورية.

export const Scope = ({children}) => <Info>
    <b>النطاق:</b> {children}
  </Info>;

**إشعارات اللعبة** تتيح لك مخاطبة لاعبيك: الإعلان عن فعالية، أو الاحتفاء بإنجاز، أو استعادة
مجموعة انقطعت عن اللعب. تكتب الرسالة مرة واحدة على هيئة **قالب**، وترسلها عبر **حملة**،
فيستلمها اللاعبون على **القنوات** التي اخترتها — صندوق الوارد داخل اللعبة، أو البريد
الإلكتروني، أو الإشعارات الفورية.

<Scope>تُحدَّد القوالب والحملات لكل **لعبة**، أما صندوق الوارد فلكل **لاعب**.</Scope>

<Tabs>
  <Tab title="لوحة التحكم">
    تجد الإشعارات ضمن **التسويق**:

    * **القوالب** — الرسالة القابلة لإعادة الاستخدام: عنوان ونص (بلغة محدّدة)، والقنوات التي
      يمكن إرسالها عبرها، و**متغيّرات** تملؤها عند الإرسال — اكتب إعلان بداية الموسم مرة واحدة
      واجعل اسم الموسم متغيّرًا، ثم أعد استخدامه كل موسم.
    * **الحملات** — عملية الإرسال الفعلية: اختر قالبًا، واملأ متغيّراته، وحدّد **الجمهور** —
      كل اللاعبين أو [شريحة](/ar/guides/segments) — ثم أرسل **الآن**، أو في وقت **مجدول**، أو
      على وتيرة **متكرّرة**. ويمكن إلغاء الحملة المجدولة في أي وقت قبل انطلاقها.
    * **حالة التسليم** — كيف جرى الإرسال: دورة حياته من مُجدولة إلى قيد الإرسال إلى مُرسَلة،
      مع أعداد التسليم لكل قناة وأي إخفاقات.
  </Tab>

  <Tab title="Unity">
    **صندوق الوارد.** اجلب إشعارات اللاعب المسجَّل دخوله، واعرض شارة غير المقروء، وضع العناصر
    كمقروءة واحدًا تلو الآخر أو دفعة واحدة.

    ```csharp theme={null}
    PaginatedResponse<Notification> inbox = await FlockClient.Instance.Notification.GetInboxAsync();
    NotificationSummary summary = await FlockClient.Instance.Notification.GetSummaryAsync();
    Debug.Log($"{summary.UnreadCount} unread");

    await FlockClient.Instance.Notification.MarkReadAsync(inbox.Items[0]);
    await FlockClient.Instance.Notification.MarkAllReadAsync();
    ```

    وتُعيد `GetSummaryAsync` عدد غير المقروء مع أحدث بضعة عناصر، فتحصل على الشارة والمعاينة
    باستدعاء واحد. وفضّلها على إعادة جلب صندوق الوارد كاملًا على فترات — فقراءات صندوق الوارد
    تُحتسب ضمن استخدام خطتك للواجهة البرمجية شأنها شأن أي استدعاء آخر.

    **الإشعارات الفورية.** تختلف طريقة الحصول على رمز الجهاز باختلاف المنصّة، وحزمة التطوير
    صريحة بشأن ما تستطيع أن تتولّاه عنك:

    * **iOS** — تطلب `RegisterThisDeviceAsync()` إذن الإشعارات من النظام وتسجّل رمز APNs الناتج
      في استدعاء واحد. وتتطلّب وجود `com.unity.mobile.notifications` في المشروع.
    * **Android** — احصل على رمز FCM من Firebase بنفسك، ثم مرّره إلى
      `RegisterDeviceTokenAsync(token)`. فعميل Firebase للمراسلة غير قابل للتثبيت عبر UPM، ومن ثمّ
      لا تستطيع حزمة التطوير شحنه كاعتمادية ولا تحاول ذلك عمدًا.
    * **ما عدا ذلك** (الحاسب المكتبي وأجهزة الكونسول والمحرّر) — يرمي الاستدعاءان استثناءً، لأن
      خادم الإشعارات الفورية لا قيمة لديه لتلك المنصّات.

    وأعد التسجيل كلما أصدر النظام رمزًا جديدًا. وتزيل `UnregisterDeviceTokenAsync` رمزًا مسجَّلًا.

    **تذكيرات تجدولها اللعبة بنفسها.** جدوِل قالبًا ليصل لاحقًا — «امتلأت الطاقة بعد ٤ ساعات» —
    وألغِه إن عاد اللاعب قبل ذلك.

    ```csharp theme={null}
    ScheduledNotification pending = await FlockClient.Instance.Notification.ScheduleAsync(
        "energy_refilled", TimeSpan.FromHours(4));

    await FlockClient.Instance.Notification.CancelScheduledAsync(pending);
    ```

    والوسيط الأول هو **اسم** القالب لا معرّفه. مرّر `variables` لملء عناصر القالب النائبة،
    و`channels` لحصر قنوات التسليم، و`locale` لاختيار لغة بعينها. أما الاسم غير المعروف فيرمي
    `FlockErrorCode.NotificationTemplateNotFound` قبل أن يُجدول أي شيء.

    **قراءة الكتالوج.** تسرد `GetTemplatesAsync()` القوالب التي يمكن للعبتك جدولتها، وتجلب
    `GetTemplateByNameAsync(name, locale)` قالبًا واحدًا. وكلتاهما على نطاق اللعبة لا اللاعب،
    ولذلك تعملان دون تسجيل دخول بخلاف بقية هذا المزوّد.

    **التفاعل مع الوصول.** يُطلَق `FlockEvents.OnNotificationReceived` مرة واحدة لكل إشعار لم
    تعرضه حزمة التطوير من قبل، من الأقدم إلى الأحدث. وهو يعتمد على عمليات الجلب التي تجريها
    لعبتك أصلًا ولا يضيف أي حركة شبكية — إذ لا توجد قناة لحظية، وحزمة التطوير لا تستقصي عمدًا.
  </Tab>
</Tabs>

<Note>
  هذه الصفحة عن الرسائل الموجَّهة **إلى اللاعبين**. أما التنبيهات الموجَّهة إلى فريقك أنت —
  ارتفاع الأخطاء، ونتائج الإصدارات — فهي [تنبيهات المطوّرين](/ar/guides/developer-alerts).
</Note>

<Note>
  سطح الإشعارات في حزمة التطوير متاح في [حزمة Unity](/ar/sdk/unity). أما دعم Unreal فغير متاح
  بعد — ومع ذلك تصل الحملات التي ترسلها من لوحة التحكم إلى كل اللاعبين، لأن التسليم يجري من جهة
  الخادم؛ فالمقتصر على Unity حاليًا هو صندوق الوارد داخل اللعبة وواجهات الجدولة.
</Note>
