# إعداد الشارات لتطبيق Flutter

1. افتح مشروع iOS الخاص بك الموجود في **your_project/ios/Runner.xcworkspace** وأنشئ **NotificationServiceExtension**:

<img src="/flutter-setting-up-badges-for-flutter-1.webp" alt=""/>

<img src="/flutter-setting-up-badges-for-flutter-2.webp" alt=""/>

2. افتح ملف Podfile (الموجود في **your_project/ios/Podfile**) وأضف الاعتمادية **PushwooshXCFramework** لـ NotificationServiceExtensionTarget:

```
target ‘NotificationService’ do
  pod ‘PushwooshXCFramework’, ‘>=6.5.0’
end
```

<Aside type="note">
يمكنك وضع هذه الأسطر بعد `target ‘Runner’ do` كما في المثال أدناه:

```bash title="مثال لملف Podfile"
target ‘Runner’ do
  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
target ‘NotificationService’ do
  pod ‘PushwooshXCFramework’, ‘>=6.5.0’
end
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end
```
</Aside>

3. قم بتثبيت الـ pods عبر Terminal:

```
cd ios && pod install
```

4. أغلق مشروع Xcode الخاص بك وأعد فتحه.

<Aside type="caution">
تأكد من أنك تفتح المشروع **عبر .xcworkspace** وليس عبر .xcproject.
</Aside>

5. تأكد من أن **هدف النشر (Deployment target) يطابق الهدف في Runner**؛ وإلا، قد تواجه مشكلة عند بناء تطبيقك (على سبيل المثال، إذا حددت iOS 10.0 في Runner و iOS 15.5 في أهداف NotificationService).

6. أضف إمكانية **مجموعات التطبيقات (App Groups)** إلى كل من هدفي Runner و NotificationService وأضف مجموعة جديدة بنفس الاسم لكلا الهدفين:

<img src="/flutter-setting-up-badges-for-flutter-3.webp" alt=""/>

<img src="/flutter-setting-up-badges-for-flutter-4.webp" alt=""/>

7. أضف علامة **PW_APP_GROUPS_NAME** في ملف info.plist إلى كل من هدفي Runner و NotificationService مع اسم المجموعة كقيمة نصية لها:

<img src="/flutter-setting-up-badges-for-flutter-5.webp" alt=""/>

8. اذهب إلى **NotificationService.m** واستبدل الكود الخاص به بالكود التالي:

```objective-c
#import “NotificationService.h”
#import &#x3C;Pushwoosh/PWNotificationExtensionManager.h>

@interface NotificationService ()
<strong>@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
</strong>@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@end

@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];
    [[PWNotificationExtensionManager sharedManager] handleNotificationRequest:request contentHandler:contentHandler];
}
- (void)serviceExtensionTimeWillExpire {
    // Called just before the extension will be terminated by the system.
    // Use this as an opportunity to deliver your “best attempt” at modified content, otherwise the original push payload will be used.
    self.contentHandler(self.bestAttemptContent);
}
@end
```


## شاركنا ملاحظاتك

تساعدنا ملاحظاتك في إنشاء تجربة أفضل، لذلك نود أن نسمع منك إذا كان لديك أي مشاكل أثناء عملية دمج SDK. إذا واجهت أي صعوبات، فلا تتردد في مشاركة أفكارك معنا [عبر هذا النموذج](https://docs.google.com/forms/d/e/1FAIpQLSd\_0b8jwn-V\_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform).