تنبيه: لا تتوفر وثائق قديمة لهذا العنصر، لذا فإنك ترى الوثائق الحالية.
يمكنك الآن تنفيذ الإشعارات الفورية لتطبيق iOS الخاص بك باستخدام حزمة تطوير البرامج لتطبيقات iOS الخاصة بنا. ستحتاج إلى مساعدة المطور الخاص بك حيث سيكون هذا تكاملاً لمرة واحدة قبل أن تتمكن من إرسال إشعارات فورية إليه باستخدام لوحة تحكم PushEngage.
قبل البدء
- ستحتاج إلى تثبيت Xcode على نظامك.
- حساب مطور صالح ومعرف التطبيق تم تكوينهما على بوابة مطوري Apple.
سنتبع هذه الخطوات لتمكين الإشعارات الفورية لتطبيق iOS الخاص بك.
- تكوين تطبيقك
- دمج حزمة تطوير البرامج PushEngage لنظام iOS
- تهيئة حزمة تطوير البرامج PushEngage لنظام iOS
- إنشاء امتداد خدمة الإشعارات
- تهيئة حزمة تطوير البرامج PushEngage لملحق خدمة الإشعارات
- إنشاء ملحق محتوى الإشعارات
- تهيئة حزمة تطوير البرامج PushEngage لملحق محتوى الإشعارات
- إضافة مجموعات التطبيقات
- الربط العميق
- التعامل مع الإشعارات في الواجهة الأمامية
- استكشاف الأخطاء وإصلاحها
تكوين تطبيقك
تمكين الإشعارات عن بُعد
1. افتح مشروع Xcode الخاص بك وحدد المشروع الجذر في مستكشف المشاريع. اختر هدف تطبيقك الرئيسي.
2. انتقل إلى التوقيع والإمكانيات. تأكد من إضافة إمكانية أوضاع الخلفية. إذا لم يكن الأمر كذلك، فأضفه بالنقر فوق الزر "+ إمكانية".
3. وبالمثل، تأكد من إضافة إمكانية الإشعارات الفورية. إذا لم يكن الأمر كذلك، فأضفه باستخدام زر "+ إمكانية".
إذا لم تكن إمكانية الإشعارات الفورية مرئية في Xcode. تحتاج إلى اتباع الخطوات أدناه:
1. انتقل إلى حساب مطور Apple الخاص بك.
2. انتقل إلى الشهادات والمعرفات والملفات الشخصية.
3. حدد معرف التطبيق الخاص بك. قم بتحرير تكوين معرف التطبيق الخاص بك وتأكد من تمكين الإشعارات الفورية.
4. عد إلى Xcode وحاول إضافة إمكانية "الإشعارات الفورية" مرة أخرى.
تمكين أوضاع الخلفية
1. في مشروع Xcode الخاص بك، انتقل إلى التوقيع والإمكانيات.
2. داخل أوضاع الخلفية، قم بتمكين كل من الإشعارات عن بُعد و جلب الخلفية.
تضمن هذه الخطوة أن تطبيقك يمكنه التعامل بكفاءة مع الإشعارات عن بُعد وجلب الخلفية.
هنا هو الدليل لإنشاء شهادة APNs الخاصة بك.
دمج حزمة تطوير البرامج PushEngage لنظام iOS
حزمة تطوير البرامج PushEngage لنظام iOS متاحة كحزمة Swift وحزمة CocoaPods. نطلب منك المرور بكلتا الطريقتين ولكن استخدام واحدة منهما فقط أثناء إكمال الإعداد الخاص بك.
دمج حزمة تطوير البرامج PushEngage لنظام iOS مع SPM
لدمج PushEngage iOS SDK باستخدام Swift Package Manager، اتبع هذه الخطوات:
- افتح XCode وانتقل إلى مشروعك. حدد علامة التبويب حزم الحزم. انقر فوق الزر +.

- الصق عنوان URL
https://github.com/awesomemotive/pushengage-ios-sdkفي شريط البحث. انقر فوق "إضافة حزمة".

- حدد هدف تطبيقك الرئيسي ضمن "إضافة إلى الهدف" وانقر فوق "إضافة حزمة".

دمج حزمة تطوير البرامج PushEngage لنظام iOS مع CocoaPods
لدمج PushEngage iOS SDK باستخدام CocoaPods، تحتاج إلى اتباع هذه الخطوات:
إذا لم يكن CocoaPods مثبتًا، أغلق مشروع Xcode الحالي الخاص بك وقم بتشغيل الأمر التالي في الدليل الجذر لمشروعك
sudo gem install cocoapods
قم بتشغيل الأمر التالي لتهيئة ملف Podfile في مشروعك
pod init
افتح ملف Podfile الذي تم إنشاؤه حديثًا باستخدام محرر نصوص أو عن طريق اتباع الأمر في الطرفية الخاصة بك في دليل مشروع الجذر.
open Podfile
أضف تبعية PushEngage ضمن هدف مشروعك. تأكد من أن ملف Podfile الخاص بك يبدو مشابهًا للمثال أدناه
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'YourProjectName' do
# Add PushEngage SDK dependency
pod 'PushEngage'
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
end
end
end
end
احفظ ملف Podfile وقم بتشغيل الأوامر التالية في الطرفية.
pod repo update
pod install
افتح ملف <project-name>.xcworkspace الذي تم إنشاؤه حديثًا في Xcode.
تهيئة حزمة تطوير البرامج PushEngage لنظام iOS
بمجرد دمج SDK، سيتعين علينا تهيئة iOS SDK في AppDelegate الخاص بك.
باستخدام لغة Swift، إليك كيف يمكنك القيام بذلك
import PushEngage
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
override init() {
super.init()
PushEngage.swizzleInjection(isEnabled: true)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Set your PushEngage App ID (replace "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD" with your actual App ID)
PushEngage.setAppId(key: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
// Start PushEngage initial info
PushEngage.setInitialInfo(for: application, with: launchOptions)
// Enable logs for debugging (optional)
PushEngage.enableLogs = true
return true
}
}
باستخدام لغة Objective-C، إليك كيف يمكنك القيام بذلك
#import "AppDelegate.h"
@import PushEngage;
@implementation AppDelegate
- (instancetype)init {
self = [super init];
if (self) {
[PushEngage swizzleInjectionWithIsEnabled:YES];
}
return self;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set your PushEngage App ID (replace "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD" with your actual App ID)
[PushEngage setAppIdWithKey:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
// Set initial info
[PushEngage setInitialInfoFor:application with:launchOptions];
// Enable logs for debugging (optional)
[PushEngage setEnableLogs:YES];
return YES;
}
@end
في بعض الأحيان، عند استخدام SwiftUI، قد لا يكون AppDelegate متاحًا افتراضيًا. في مثل هذه الحالات، يمكنك تهيئة PushEngage SDK في ملف App الرئيسي الخاص بك. إليك مثال في SwiftUI
import SwiftUI
import PushEngage
@main
struct PEDemoApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate {
override init() {
super.init()
PushEngage.swizzleInjection(isEnabled: true)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
PushEngage.setAppId(key: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
PushEngage.setIntialInfo(for: application,
with: launchOptions)
PushEngage.enableLogs = true
return true
}
}
ملاحظة: أثناء تطوير تطبيقك، قد تجد أنه من المفيد تمكين السجلات من PushEngage SDK لأغراض التصحيح. ومع ذلك، من الضروري تعطيل السجلات في إصدار الإنتاج لتجنب الكشف عن معلومات حساسة.
إنشاء امتداد خدمة الإشعارات
تعمل Notification Service Extension على تحسين قدرة تطبيق iOS الخاص بك على تلقي الإشعارات. يُستخدم هذا لتعديل محتوى الإشعار أو جلب/معالجة أي بيانات عند تلقي الإشعار. يمكنك اتباع الخطوات أدناه لإنشاء Notification Service Extension:
1. افتح Xcode وانتقل إلى مشروعك. اختر ملف » جديد » هدف من القائمة.
2. في نافذة تحديد القالب، اختر Notification Service Extension وانقر فوق التالي.
3. قم بتوفير اسم للملحق الخاص بك، على سبيل المثال، PushEngageNotificationServiceExtension، وانقر فوق إنهاء.
4. عند الانتهاء من إنشاء Notification Service Extension، قد تتم مطالبتك بتنشيطه. لا تقم بتنشيطه على الفور.
سيؤدي تنشيط الملحق إلى تحويل تركيز تصحيح Xcode من تطبيقك إلى الملحق. إذا قمت بتنشيطه عن طريق الخطأ، فلا تقلق؛ يمكنك التبديل مرة أخرى إلى تصحيح تطبيقك داخل Xcode.
تهيئة حزمة تطوير البرامج PushEngage لملحق خدمة الإشعارات
لضمان الأداء السليم لـ PushEngage SDK في ملحق خدمة إشعارات iOS الخاص بك، تحتاج إلى اتباع هذه الخطوات:
1. افتح ملف Podfile المرتبط بمشروعك.
2. ثم تحتاج إلى إضافة تبعية. أدخل مقتطف الكود التالي في ملف Podfile الخاص بك:
target 'Your_Main_Application_Target' do
pod 'PushEngage'
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
end
end
end
target 'Your_Notification_Service_Extension_Target' do
pod 'PushEngage'
end
end
3. قم بتشغيل الأوامر التالية في الطرفية الخاصة بك داخل دليل مشروع الجذر:
pod repo update
pod install
4. في هدف ملحق الخدمة الخاص بالإشعارات لديك، قم باستيراد إطار عمل PushEngage وأضف رمز التهيئة اللازم. إليك كيف يمكنك القيام بذلك.
باستخدام Swift
import UserNotifications
import PushEngage
@available(iOSApplicationExtension 10.0, *)
class PushEngageNotificationServiceExtension: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
var request : UNNotificationRequest?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.request = request
self.contentHandler = contentHandler
self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestContent = bestAttemptContent {
PushEngage.didReceiveNotificationExtensionRequest(request, bestContentHandler: bestContent)
contentHandler(bestContent)
}
}
override func 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.
if let contentHandler = contentHandler, let request = request ,let bestAttemptContent = bestAttemptContent {
guard let content = PushEngage.serviceExtensionTimeWillExpire(request, content: bestAttemptContent) else {
contentHandler(bestAttemptContent)
return
}
contentHandler(content)
}
}
}
باستخدام Objective-C
#import "NotificationService.h"
@import PushEngage;
@interface NotificationService ()
@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@property (nonatomic, strong) UNNotificationRequest *request;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.request = request;
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
if (self.bestAttemptContent) {
[PushEngage didReceiveNotificationExtensionRequest:request bestContentHandler:self.bestAttemptContent];
contentHandler(self.bestAttemptContent);
}
}
- (void)serviceExtensionTimeWillExpire {
if (self.contentHandler && self.request && self.bestAttemptContent) {
UNNotificationContent *content = [PushEngage serviceExtensionTimeWillExpire:self.request content:self.bestAttemptContent];
if (content) {
self.contentHandler(self.bestAttemptContent);
return;
}
}
self.contentHandler(self.bestAttemptContent);
}
@end
إنشاء ملحق محتوى الإشعارات
لتحسين الطريقة عن طريق إضافة واجهة مستخدم مخصصة، ستحتاج إلى إنشاء ملحق محتوى الإشعارات. اتبع الخطوات التالية لإعداد الملحق:
1. في Xcode، انتقل إلى File » New » Target.
2. حدد Notification Content Extension وانقر فوق Next.
3. لا تحدد "Activate" في مربع الحوار الذي يظهر بعد النقر فوق Finish. يؤدي الإلغاء إلى استمرار Xcode في تصحيح تطبيقك بدلاً من الملحق. إذا قمت بتفعيله عن طريق الخطأ، فارجع إلى تصحيح تطبيقك داخل Xcode (بجانب زر التشغيل).
4. في مستكشف المشروع، حدد دليل المشروع الرئيسي وحدد هدف NotificationContentExtension في المشروع من قائمة الأهداف التي تم إنشاؤها في الخطوة رقم 2.
5. اضبط Deployment Target على iOS 10 أو أعلى، وهو إصدار iOS الذي أصدرت فيه Apple الدعم لهذا الملحق.
تهيئة حزمة تطوير البرامج PushEngage لملحق محتوى الإشعارات
لضمان الأداء السليم لحزمة SDK الخاصة بـ PushEngage في ملحق محتوى الإشعارات الخاص بك لنظام iOS، تحتاج إلى اتباع هذه الخطوات:
1. افتح ملف Podfile المرتبط بمشروعك.
2. Add Dependency، أدخل مقتطف الرمز التالي في ملف Podfile الخاص بك:
target 'Your_Main_Application_Target' do
pod 'PushEngage'
target 'Your_Notification_Content_Extension' do
pod 'PushEngage'
end
end
3. قم بتشغيل الأوامر التالية في الطرفية الخاصة بك داخل دليل مشروع الجذر:
pod repo update
pod install
4. في هدف ملحق محتوى الإشعارات لديك، قم باستيراد إطار عمل PushEngage وأضف رمز التهيئة اللازم. إليك كيف يمكنك القيام بذلك مع بعض الأمثلة على عناصر واجهة المستخدم:
باستخدام Swift
import UIKit
import UserNotifications
import UserNotificationsUI
import PushEngage
@available(iOSApplicationExtension 10.0, *)
class NotificationViewController: UIViewController, UNNotificationContentExtension {
fileprivate var hostingView: UIHostingController<ContentView>?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
}
func didReceive(_ notification: UNNotification) {
if(notification.request.content.categoryIdentifier == "your_identifier"){
let payLoad = PushEngage.getCustomUIPayLoad(for: notification.request)
//pass the payload to your custom View
let view = CustomView(payLoadInfo: payLoad)
hostingView = UIHostingController(rootView: view)
If let customView = self.hostingView {
addChild(hostingView!)
}
}
}
}
Objective-C:
#import "NotificationViewController.h"
#import <UserNotifications/UserNotifications.h>
#import <UserNotificationsUI/UserNotificationsUI.h>
@import PushEngage;
@import UIKit;
@interface NotificationViewController () <UNNotificationContentExtension>
@property IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIButton *firstButton;
@property (weak, nonatomic) IBOutlet UIButton *secondButton;
@end
@implementation NotificationViewController
- (IBAction)firstbuttonAction:(id)sender {
// do what action you want to perform.
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any required interface initialization here.
}
- (void)didReceiveNotification:(UNNotification *)notification {
NotificationViewController * __block blockSelf = self;
CustomUIModel *object = [PushEngage getCustomUIPayLoadFor:notification.request];
dispatch_async(dispatch_get_main_queue(), ^{
blockSelf.label.text = object.title;
blockSelf.imageView.image = object.image;
[blockSelf.firstButton setTitle:object.buttons.firstObject.text forState:UIControlStateNormal];
[blockSelf.secondButton setTitle:object.buttons.lastObject.text forState:UIControlStateNormal];
blockSelf = NULL;
});
}
@end
إضافة مجموعات التطبيقات
مجموعات التطبيقات ضرورية للتواصل بين التطبيق الرئيسي وملحق خدمة الإشعارات وملحق المحتوى. يمكنك اتباع هذه الخطوات لإضافة مجموعات التطبيقات إلى مشروع iOS الخاص بك:
إذا كان لديك مجموعة تطبيقات موجودة وترغب في استخدامها فقط، فانتقل إلى الخطوة رقم 5.
1. في مشروع Xcode الخاص بك، في مستكشف المشروع، حدد دليل المشروع الرئيسي وحدد الهدف الرئيسي للتطبيق.
2. انتقل إلى علامة التبويب Signing & Capabilities.
3. انقر فوق الزر "+ Capability" وحدد App Groups من القائمة.
4. انقر فوق الزر + لإضافة مجموعة تطبيقات. أضف اسمًا فريدًا لمجموعة التطبيقات الخاصة بك وانقر فوق OK.
5. في منطقة المحرر الرئيسية، حدد الهدف الرئيسي لتطبيقك وأنشئ مجموعة تطبيقات. يرجى تقديم اسم المجموعة في ملف Info.plist الخاص بتطبيقك باستخدام المفتاح PushEngage_App_Group_Key.
6. أضف نفس المفتاح والقيمة في ملف Info.plist الخاص بملحق خدمة الإشعارات.
7. حدد نفس مجموعة التطبيقات في هدف التطبيق الرئيسي وملحق خدمة الإشعارات الخاص بك.
تأكد من أنك تحدد ملحق خدمة الإشعارات الخاص بك في الخطوة المذكورة أعلاه.
الربط العميق
يُمكّن الربط العميق المشتركين لديك من الانتقال مباشرةً إلى شاشة معينة داخل التطبيق أو صفحة ويب مخصصة عند التفاعل مع إشعارات الدفع. بشكل افتراضي، إذا قمت بتوفير عنوان URL صالح، فسيتم إعادة توجيه المشترك إلى صفحة الويب هذه.
معالجة عناوين URL لصفحات الويب:
- قم بتوفير
PushEngageInAppEnabledإلى YES في Info.plist، ثم سيتم تحميل عنوان URL داخل التطبيق باستخدام WKWebview. - قم بتوفير
PushEngageInAppEnabledإلى NO في Info.plist، إذا كنت تريد أن يتم إعادة توجيه مشتركك إلى سفاري لتحميل عنوان URL. - قم بتوفير
PushEngageAutoHandleDeeplinkURLإلى YES في Info.plist، ثم سيتعامل SDK مع الرابط العميق وفقًا لتكوينPushEngageInAppEnabled. - قم بتوفير
PushEngageAutoHandleDeeplinkURLإلى NO في Info.plist، ثم سيتم منح التحكم في معالجة الرابط العميق لتطبيق العميل من SDK. - إذا لم يكن الرابط العميق عنوان URL صالحًا، فستحتاج إلى تكوين التنقل باستخدام
setNotificationOpenHandlerفيAppDelegateضمن طريقةdidFinishLaunchingWithOptions. يتيح لك هذا الانتقال إلى شاشة معينة بناءً على السلسلة المقدمة، كما هو موضح أدناه. إذا لم يتم تكوينه، فسيقوم SDK ببساطة بفتح التطبيق.

باستخدام Swift:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
override init() {
super.init()
// method Swizzling enabled for the application.
PushEngage.swizzleInjection(isEnabled: true)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
PushEngage.setAppId(key: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
PushEngage.setInitialInfo(for: application,with: launchOptions)
// Notification open handler.
// deep linking screen
// here ShoesScreen and pepay are example deep link texts
PushEngage.setNotificationOpenHandler { (result) in
//replace this block with your own handling
let additionData = result.notification.additionalData
if result.notificationAction.actionID == "ShoesScreen" {
print(additionData ?? [])
let storyBoard = UIStoryboard(name: "Main", bundle: .main)
let viewController = storyBoard.instantiateViewController(withIdentifier: "SportViewController")
let navcontroller = application.windows.first?.rootViewController as? UINavigationController
navcontroller?.popToRootViewController(animated: true)
navcontroller?.pushViewController(viewController, animated: true)
} else if result.notificationAction.actionID == "SalesScreen" {
let storyBoard = UIStoryboard(name: "Main", bundle: .main)
let viewController = storyBoard.instantiateViewController(withIdentifier: "NotificationApiTestViewconttoller")
let navcontroller = application.windows.first?.rootViewController as? UINavigationController
navcontroller?.popToRootViewController(animated: true)
navcontroller?.pushViewController(viewController, animated: true)
} else if result.notificationAction.actionID == "pepay" {
let storyBoard = UIStoryboard(name: "Main", bundle: .main)
let viewController = storyBoard.instantiateViewController(withIdentifier: "PEPay")
let navcontroller = application.windows.first?.rootViewController as? UINavigationController
navcontroller?.popToRootViewController(animated: true)
navcontroller?.pushViewController(viewController, animated: true)
}
}
PushEngage.enableLogs = true
return true
}
}
باستخدام Objective-C:
@implementation AppDelegate
- (instancetype)init
{
self = [super init];
if (self) {
[PushEngage swizzleInjectionWithIsEnabled: YES];
}
return self;
}
typedef void (^PEnotificationOpenHandler)(PENotificationOpenResult * nonnull);
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UNUserNotificationCenter.currentNotificationCenter.delegate = self;
PEnotificationOpenHandler actionHandler = ^void(PENotificationOpenResult *result) {
//replace this block with your own handling
if ([result.notificationAction.actionID isEqualToString: @"ShoesScreen"]) {
AddToCart *controller = [AddToCart new];
UINavigationController *navigationController = (UINavigationController *) application.windows.firstObject.rootViewController;
[navigationController popToRootViewControllerAnimated:YES];
[navigationController pushViewController:controller animated:YES];
} else if ([result.notificationAction.actionID isEqualToString: @"SalesScreen"]) {
SportsViewcontroller *controller = [SportsViewcontroller new];
UINavigationController *navigationController = (UINavigationController *) application.windows.firstObject.rootViewController;
[navigationController popToRootViewControllerAnimated:YES];
[navigationController pushViewController:controller animated:YES];
}
};
application.applicationIconBadgeNumber = 0;
[PushEngage setAppIdWithKey:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
[PushEngage setInitialInfoFor:application with:launchOptions];
[PushEngage setNotificationOpenHandlerWithBlock:actionHandler];
[PushEngage setEnableLogs:true];
return YES;
}
@end
التعامل مع الإشعارات في الواجهة الأمامية
عندما تأتي الإشعارات في المقدمة، عليك اتخاذ قرار بشأن ما إذا كنت ستعرض تنبيه الإشعار للجهاز أم لا. لمعالجة الإشعارات في المقدمة، استخدم setNotificationWillShowInForgroundHandler
إذا لم تقم باستدعاء كتلة الإكمال على الإطلاق، فسيقوم SDK باستدعاء كتلة الإكمال بعد 29 ثانية. في أي حال، سواء كان إشعارًا صامتًا أو تنبيهًا عندما يكون التطبيق في وضع المقدمة.
باستخدام Swift
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
override init() {
super.init()
// method Swizzling enabled for the application.
PushEngage.swizzleInjection(isEnabled: true)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
PushEngage.setAppId(key: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
PushEngage.setInitialInfo(for: application, with: launchOptions)
// Notification handler when notification deliver's and app is in foreground.
PushEngage.setNotificationWillShowInForgroundHandler { notification, completion in
if notification.contentAvailable == 1 {
// in case the developer failed to set the completion handler. After 29 sec the handler will call from the SDK after 29 sec.
completion(nil)
} else {
completion(notification)
}
}
PushEngage.enableLogs = true
return true
}
}
باستخدام Objective-C
@implementation AppDelegate
- (instancetype)init
{
self = [super init];
if (self) {
[PushEngage swizzleInjectionWithIsEnabled: YES];
}
return self;
}
// please create this handlers
typedef void (^ _Nonnull PENotificationDisplayHandler)(PENotification * _Nullable);
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UNUserNotificationCenter.currentNotificationCenter.delegate = self;
[PushEngage setNotificationWillShowInForgroundHandlerWithBlock:^(PENotification * _Nonnull notification, PENotificationDisplayHandler completion) {
if (notification.contentAvailable == 1) {
completion(nil);
} else {
completion(notification);
}
}];
[PushEngage setAppIdWithKey:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
[PushEngage setInitialInfoFor:application with:launchOptions];
[PushEngage setEnableLogs:true];
return YES;
}
@end
استكشاف الأخطاء وإصلاحها
المشكلة:
تواجه مشكلات في البناء تتعلق بالعزل الأمني.
الحل:
- افتح مشروعك في Xcode.
- انتقل إلى إعدادات البناء.
- حدد موقع خيار عزل سكربت المستخدم.
- قم بتعيينه على No.
المشكلة:
أنت تستخدم كل من Firebase SDK و PushEngage SDK مع تمكين تبديل الأساليب لكليهما، وهذا يسبب مشكلات.
الحل:
قم بتعطيل تبديل الأساليب لـ PushEngage SDK واتبع الخطوات اليدوية لمعالجة أساليب PushEngage. يمكنك العثور على تعليمات مفصلة على: وثائق PushEngage iOS SDK
إذا كنت ترغب في استكشاف المزيد من إمكانيات iOS SDK، يمكنك الاطلاع على وثائق API المفصلة الخاصة بنا.
إذا واجهت أي مشكلات، يرجى الاتصال بنا بالنقر هنا. سيكون فريق الدعم لدينا قادرًا على مساعدتك.