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

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

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

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

2. انقر على زر القائمة المنسدلة **Add Device** في الزاوية العلوية اليمنى واختر **Push**.

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

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

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

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

1. في قسم **Test Devices**، انقر على **Add Device** واختر **Push**.
2. امسح رمز QR الذي يظهر في النافذة المنبثقة. سيؤدي هذا إلى إنشاء رابط عميق (deep link) يمكن لـ Pushwoosh SDK تحليله لتسجيل جهازك تلقائيًا كجهاز اختبار.
3. أضف الرابط العميق إلى إعدادات التطبيق:
* **لـ Android**: أضفه إلى ملف `AndroidManifest.xml`.
* **لـ iOS**: أضفه إلى ملف `Info.plist`.

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

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


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

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

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

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


## التنفيذ

### 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 في نموذج **Test Devices** باستخدام أي تطبيق مناسب لمسح رموز QR*. ستظهر رسالة سريعة (toast message) تشير إلى حالة تسجيل جهاز الاختبار.

\* معظم تطبيقات مسح رموز 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 في نموذج **Test Devices** باستخدام أي ماسح ضوئي مناسب لرموز QR.