# إضافة أجهزة اختبار الإشعارات

يمكنك استخدام أجهزة الاختبار (Test Devices) لمعاينة كيف تبدو الإشعارات (push notifications) على الجهاز قبل إرسالها لمستخدمي التطبيق. للقيام بذلك، تحتاج إلى **تسجيل جهازك** (مع تثبيت تطبيقك عليه) كـ **جهاز اختبار (Test Device)**.

<Aside type="note">
يغطي هذا الدليل أجهزة اختبار الإشعارات. لا تحتاج أجهزة اختبار البريد الإلكتروني والرسائل القصيرة إلى أي تكامل من جانب التطبيق — راجع [جهاز اختبار البريد الإلكتروني](/ar/product/first-steps/start-with-your-project/test-your-integration/test-devices/#test-email-device) و[جهاز اختبار الرسائل القصيرة](/ar/product/first-steps/start-with-your-project/test-your-integration/test-devices/#test-sms-device) في وثائق المنتج.
</Aside>

لإضافة جهاز اختبار:
1. انتقل إلى قسم **أجهزة الاختبار (Test devices)** في حساب Pushwoosh الخاص بك.

<img src="/test-your-integration-test-devices-1.webp" alt="قسم أجهزة الاختبار في حساب Pushwoosh"/>

2. انقر على زر القائمة المنسدلة **إنشاء جهاز اختبار (Create test device)** في الزاوية العلوية اليمنى واختر **Push**.

<img src="/test-your-integration-test-devices-2.webp" alt="زر القائمة المنسدلة لإنشاء جهاز اختبار مع خيار Push في قسم أجهزة الاختبار"/>

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

## إضافة أجهزة الاختبار تلقائيًا

هذه الطريقة مناسبة فقط لأجهزة iOS و Android.

قبل التسجيل الأول، أضف معالجة الروابط العميقة (deep link) لأجهزة الاختبار إلى التطبيق — وهو إعداد لمرة واحدة، يتم عادةً مع تكامل Pushwoosh SDK:
* **بالنسبة لـ Android**: أضف **DeepLinkActivity** إلى ملف `AndroidManifest.xml`.
* **بالنسبة لـ iOS**: أضف مخطط URL `pushwoosh-YOUR_PUSHWOOSH_APP_ID` إلى ملف `Info.plist`.

اتبع التعليمات الخاصة بـ Android و iOS في [قسم التنفيذ.](/ar/developer/first-steps/test-your-integration/test-devices#implementation)

بمجرد الانتهاء من ذلك، لتسجيل جهاز:

1. في قسم **أجهزة الاختبار (Test Devices)**، انقر على **إنشاء جهاز اختبار (Create test device)** واختر **Push**.
2. امسح رمز QR الذي يظهر في النافذة المنبثقة باستخدام أي تطبيق ماسح لرمز QR. سيؤدي هذا إلى فتح الرابط العميق الذي يقوم Pushwoosh SDK بتحليله لتسجيل جهازك كجهاز اختبار.

<img src="/test-your-integration-test-devices-6.webp" alt="مربع حوار إضافة جهاز اختبار مع رمز QR للإعداد التلقائي على اليسار وحقول الإعداد اليدوي لـ HWID على اليمين"/>

<Aside type="tip" title="نصيحة لقارئات QR">
تأكد من أن الرابط الممسوح ضوئيًا يفتح في المتصفح الأصلي، وليس في عرض الويب الخاص بقارئ QR. تحتوي العديد من قارئات QR على زر "فتح في المتصفح" لهذا الغرض.
</Aside>

## تسجيل جهاز اختبار من التطبيق

بشكل مستقل عن طريقة رمز QR المذكورة أعلاه، يمكن لـ Pushwoosh SDK تسجيل الجهاز الحالي كجهاز اختبار من تلقاء نفسه: عن طريق إرسال التطبيق إلى الخلفية وإعادته إلى الواجهة 6 مرات في غضون 30 ثانية. لا حاجة للمسح الضوئي أو الإدخال اليدوي.

لمنع التسجيلات غير المقصودة، يعمل هذا فقط أثناء فتح نافذة تسجيل مدتها ساعة واحدة.

1. في [قسم أجهزة الاختبار](/ar/product/first-steps/start-with-your-project/test-your-integration/test-devices/#registering-a-test-device-from-the-app)، قم بتشغيل مفتاح **إضافة أجهزة اختبار من التطبيق (Add test devices from the app)**. هذا يفتح النافذة لمدة ساعة واحدة.

<Aside type="caution">
يتطلب تشغيل المفتاح إذنًا لتعديل التطبيق؛ وبدونه، يفشل الطلب مع ظهور خطأ "user cannot modify application". تظل النافذة مفتوحة لمدة ساعة واحدة ثم تغلق تلقائيًا؛ وأثناء إغلاقها، لا يزال استدعاء التسجيل الخاص بالتطبيق يُرجع نجاحًا، ولكن لا يتم تسجيل أي جهاز.
</Aside>

<img src="/test-your-integration-test-devices-5.webp" alt="رأس صفحة أجهزة الاختبار مع مفتاح إضافة أجهزة اختبار من التطبيق وزر إنشاء جهاز اختبار"/>

2. أثناء فتح النافذة، ضع التطبيق في الخلفية ثم أعده إلى الواجهة 6 مرات في غضون 30 ثانية. تتم إضافة الجهاز إلى قائمة **أجهزة الاختبار (Test Devices)**.

## إضافة أجهزة الاختبار يدويًا

إذا كنت تفضل تسجيل جهاز اختبار يدويًا، فاتبع هذه الخطوات:

1. احصل على **معرف الجهاز (Hardware ID - HWID)** من استدعاء API ناجح لـ [`/registerDevice`](/ar/developer/api-reference/device-api#registerdevice).
2. املأ الحقول المطلوبة:
   * **اسم الجهاز (Device Name)**: اسم وصفي لجهاز الاختبار (على سبيل المثال، "جهاز جون Android").
   * **معرف الجهاز (Device HWID)**: معرف الجهاز الفريد.
   * **نوع الجهاز (Device Type)**: حدد المنصة (على سبيل المثال، iOS، Android، Web).
   * **الوصف (اختياري)**: أضف أي ملاحظات أو تفاصيل حول الجهاز للرجوع إليها.
3. انقر على **حفظ (Save)** لتسجيل جهاز الاختبار.

بمجرد التسجيل، سيكون جهاز الاختبار متاحًا في قسم **أجهزة الاختبار (Test Devices)**.

## تسجيل أجهزة الاختبار عبر API

لتوفير أجهزة الاختبار من برنامج نصي أو CI pipeline بدلاً من النموذج اليدوي، استدعِ [`createTestDevice`](/ar/developer/api-reference/test-devices/#createtestdevice) مع [push token](/ar/developer/api-reference/api-identifiers/#push-token) الخاص بالجهاز — وليس HWID المستخدم في النموذج اليدوي، وهو معرف مختلف يتم الحصول عليه بنفس الطريقة، على سبيل المثال، من استدعاء ناجح لـ [`/registerDevice`](/ar/developer/api-reference/device-api#registerdevice). يُرجع [`listTestDevices`](/ar/developer/api-reference/test-devices/#listtestdevices) ما هو مسجل بالفعل للتطبيق.

## التنفيذ

### Android

1. [دمج Pushwoosh SDK](/ar/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/) مع تطبيقك.

2. أضف **DeepLinkActivity** إلى _AndroidManifest.xml_ الخاص بك:

```txt
<activity
          android:name="com.pushwoosh.DeepLinkActivity"
          android:theme="@android:style/Theme.Translucent.NoTitleBar" >
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="pushwoosh-YOUR_PUSHWOOSH_APP_ID" />
  </intent-filter>
</activity>
```

لا تنسَ استبدال _YOUR\_PUSHWOOSH\_APP\_ID_ في ملف xml أعلاه بمعرف تطبيق Pushwoosh الخاص بك.\
مثال: _\<data android:scheme="pushwoosh-ABCDE-EDCBA" />_

3. شغّل التطبيق للاشتراك في الإشعارات.

4. امسح رمز QR في نموذج **أجهزة الاختبار** باستخدام أي تطبيق ماسح لرمز QR مناسب*. ستظهر رسالة toast تشير إلى حالة تسجيل جهاز الاختبار.

\* معظم تطبيقات مسح رمز QR تتعامل مع هذه الروابط العميقة بشكل صحيح، وفيما يلي بعض منها:

* [QR & Barcode Scanner, Gamma Play](https://play.google.com/store/apps/details?id=com.gamma.scan)
* [QR & Barcode Scanner, Maker, AppSourceHub](https://play.google.com/store/apps/details?id=qrcode.scanner.qrmaker)

### iOS

1. [دمج Pushwoosh SDK](/ar/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/) مع تطبيقك.

2. أضف مخطط URL _pushwoosh-YOUR\_PUSHWOOSH\_APP\_ID_ إلى ملف _Info.plist_:

```xml
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>com.pushwoosh.scheme</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>pushwoosh-YOUR_PUSHWOOSH_APP_ID</string>
    </array>
  </dict>
</array>
```

لا تنسَ استبدال _YOUR\_PUSHWOOSH\_APP\_ID_ في ملف XML أعلاه بمعرف تطبيق Pushwoosh الخاص بك.\
مثال: _pushwoosh-ABCDE-EDCBA_

<Aside type="caution">
 **إذا كان مشروعك مبنيًا باستخدام SwiftUI (فقط)، فأنت بحاجة إلى إضافة SceneDelegate**

يدير SwiftUI دورة حياة التطبيق بشكل مختلف عن UIKit. لضمان عمل بعض أحداث النظام بشكل صحيح — مثل تسجيل جهاز اختبار للإشعارات أو معالجة الروابط العميقة — تحتاج إلى إضافة وتسجيل SceneDelegate بشكل صريح.

بدونه، قد لا يتم تشغيل هذه الأحداث بشكل صحيح، وقد يفشل تسجيل الإشعارات.

إذا كنت لا تستخدم SwiftUI، يمكنك تخطي هذه الخطوة والانتقال مباشرة إلى **الخطوة 3**.
</Aside>

**Info.plist**
<details>
  <summary>أضف `UIApplicationSceneManifest` إلى `Info.plist` الخاص بك.</summary>

  ```xml
	<key>UIApplicationSceneManifest</key>
	<dict>
		<key>UIApplicationSupportsMultipleScenes</key>
		<true/>
		<key>UISceneConfigurations</key>
		<dict>
			<key>UIWindowSceneSessionRoleApplication</key>
			<array>
				<dict>
					<key>UISceneConfigurationName</key>
					<string></string>
					<key>UISceneDelegateClassName</key>
					<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
				</dict>
			</array>
		</dict>
	</dict>
  ```

</details>

**SceneDelegate**
<details>
  <summary>أضف كود `SceneDelegate` كما هو موضح في المثال أدناه.</summary>

  ```swift
import SwiftUI

@main
struct DemoApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class SceneDelegate: NSObject, UIWindowSceneDelegate {
    
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
    
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        let sceneConfig: UISceneConfiguration = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role)
        sceneConfig.delegateClass = SceneDelegate.self
        return sceneConfig
    }

}
  ```

</details>

3. شغّل التطبيق للاشتراك في الإشعارات.

4. امسح رمز QR في نموذج **أجهزة الاختبار** باستخدام أي ماسح ضوئي مناسب لرمز QR.