Πώς να ρυθμίσετε ειδοποιήσεις Push εφαρμογής iOS με το PushEngage

Μπορείτε πλέον να υλοποιήσετε ειδοποιήσεις push για την εφαρμογή σας iOS χρησιμοποιώντας το iOS App SDK μας. Θα χρειαστείτε τη βοήθεια του προγραμματιστή σας, καθώς θα είναι μια εφάπαξ ενσωμάτωση πριν μπορέσετε να τους στείλετε ειδοποιήσεις push χρησιμοποιώντας τον πίνακα ελέγχου PushEngage.

Πριν Ξεκινήσετε

  • Θα χρειαστείτε το Xcode εγκατεστημένο στο σύστημά σας.
  • Ένας έγκυρος λογαριασμός προγραμματιστή και ένα App ID έχουν διαμορφωθεί στην πύλη προγραμματιστών της Apple.

Θα ακολουθήσουμε αυτά τα βήματα για να ενεργοποιήσουμε τις ειδοποιήσεις push για την εφαρμογή σας iOS.

Διαμόρφωση της Εφαρμογής σας

Ενεργοποίηση Απομακρυσμένων Ειδοποιήσεων

1. Ανοίξτε το έργο σας στο Xcode και επιλέξτε το κύριο έργο στον Οδηγό Έργου. Επιλέξτε τον κύριο στόχο της εφαρμογής σας.

2. Μεταβείτε στις Δυνατότητες Υπογραφής & &. Βεβαιωθείτε ότι έχει προστεθεί η δυνατότητα Λειτουργιών Παρασκηνίου. Αν όχι, προσθέστε την κάνοντας κλικ στο κουμπί “+ Δυνατότητα”.

3. Ομοίως, βεβαιωθείτε ότι έχει προστεθεί η δυνατότητα Ειδοποιήσεων Push. Αν όχι, προσθέστε την χρησιμοποιώντας το κουμπί “+ Δυνατότητα”.

Εάν η δυνατότητα Ειδοποιήσεις Push δεν είναι ορατή στο Xcode. Πρέπει να ακολουθήσετε τα παρακάτω βήματα:

1. Μεταβείτε στον λογαριασμό σας στην Apple Developer.

2. Μεταβείτε στις Πιστοποιητικά, Αναγνωριστικά & & Προφίλ.

3. Επιλέξτε το αναγνωριστικό της εφαρμογής σας. Επεξεργαστείτε τη διαμόρφωση του App ID σας και βεβαιωθείτε ότι οι Ειδοποιήσεις Push είναι ενεργοποιημένες.

4. Επιστρέψτε στο Xcode και προσπαθήστε να προσθέσετε ξανά τη δυνατότητα “Ειδοποιήσεις Push”.

Ενεργοποίηση Λειτουργιών Παρασκηνίου

1. Στο έργο σας στο Xcode, μεταβείτε στις Δυνατότητες Υπογραφής & &.

2. Μέσα στις Λειτουργίες Παρασκηνίου, ενεργοποιήστε τόσο τις Απομακρυσμένες ειδοποιήσεις όσο και την Ανάκτηση Παρασκηνίου.

Αυτό το βήμα διασφαλίζει ότι η εφαρμογή σας μπορεί να χειριστεί αποτελεσματικά τις απομακρυσμένες ειδοποιήσεις και τις ανακτήσεις παρασκηνίου.

Εδώ είναι ο οδηγός για τη δημιουργία του πιστοποιητικού APNs σας.

Ενσωμάτωση του PushEngage iOS SDK

Το PushEngage iOS SDK είναι διαθέσιμο ως πακέτο Swift και ως pod CocoaPods. Σας ζητούμε να εξετάσετε και τις δύο μεθόδους, αλλά να χρησιμοποιήσετε μόνο μία από αυτές κατά την ολοκλήρωση της ρύθμισής σας.

Ενσωμάτωση του PushEngage iOS SDK με SPM

Για να ενσωματώσετε το PushEngage iOS SDK χρησιμοποιώντας το Swift Package Manager, ακολουθήστε αυτά τα βήματα:

  1. Ανοίξτε το Xcode και μεταβείτε στο έργο σας. Επιλέξτε την καρτέλα εξαρτήσεων πακέτου. Κάντε κλικ στο κουμπί +.
  1. Επικολλήστε τη διεύθυνση URL https://github.com/awesomemotive/pushengage-ios-sdk στη γραμμή αναζήτησης. Κάντε κλικ στο “Προσθήκη Πακέτου”.
  1. Επιλέξτε τον κύριο στόχο της εφαρμογής σας στην ενότητα "Προσθήκη στο Στόχο" και κάντε κλικ στο "Προσθήκη Πακέτου".

Ενσωμάτωση του PushEngage iOS SDK με 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

Μόλις ενσωματώσετε το 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 στο κύριο αρχείο της εφαρμογής σας. Ακολουθεί ένα παράδειγμα στο 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

Η επέκταση Notification Service βελτιώνει την ικανότητα της εφαρμογής σας iOS να λαμβάνει ειδοποιήσεις. Αυτό χρησιμοποιείται για την τροποποίηση του περιεχομένου της ειδοποίησης ή τη λήψη/επεξεργασία οποιωνδήποτε δεδομένων κατά τη λήψη της ειδοποίησης. Μπορείτε να ακολουθήσετε τα παρακάτω βήματα για να δημιουργήσετε μια επέκταση Notification Service:

1. Ανοίξτε το Xcode και μεταβείτε στο έργο σας. Επιλέξτε Αρχείο » Νέο » Στόχος από το μενού.

2. Στο παράθυρο επιλογής προτύπου, επιλέξτε Notification Service Extension και κάντε κλικ στο Επόμενο.

3. Δώστε ένα όνομα για την επέκτασή σας, για παράδειγμα, PushEngageNotificationServiceExtension, και κάντε κλικ στο Τέλος.

4. Όταν ολοκληρώσετε τη δημιουργία της επέκτασης Notification Service, ενδέχεται να σας ζητηθεί να την ενεργοποιήσετε. Μην την ενεργοποιήσετε αμέσως.

Η ενεργοποίηση της επέκτασης θα μετατοπίσει την εστίαση αποσφαλμάτωσης του Xcode από την εφαρμογή σας στην επέκταση. Εάν την ενεργοποιήσετε κατά λάθος, μην ανησυχείτε. μπορείτε να επιστρέψετε στην αποσφαλμάτωση της εφαρμογής σας εντός του Xcode.

Αρχικοποίηση του SDK PushEngage για την Επέκταση Υπηρεσίας Ειδοποιήσεων

Για να διασφαλίσετε τη σωστή λειτουργία του PushEngage SDK στην επέκταση Notification Service του 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. Στον στόχο της επέκτασης Notification Service, εισαγάγετε το πλαίσιο 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

Δημιουργία Επέκτασης Περιεχομένου Ειδοποίησης

Για να βελτιώσετε τον τρόπο με τον οποίο προσθέτετε προσαρμοσμένο UI, θα χρειαστεί να δημιουργήσετε μια Επέκταση Περιεχομένου Ειδοποίησης. Ακολουθήστε τα παρακάτω βήματα για να ρυθμίσετε την επέκταση:

1. Στο Xcode, μεταβείτε στο Αρχείο » Νέο » Στόχος.

2. Επιλέξτε Notification Content Extension και κάντε κλικ στο Επόμενο.

3. Μην επιλέξετε “Ενεργοποίηση” στο παράθυρο διαλόγου που εμφανίζεται μετά το κλικ στο Τέλος. Η ακύρωση διατηρεί την αποσφαλμάτωση της εφαρμογής σας από το Xcode αντί για την επέκταση. Αν την ενεργοποιήσετε κατά λάθος, επιστρέψτε στην αποσφαλμάτωση της εφαρμογής σας εντός του Xcode (δίπλα στο κουμπί εκτέλεσης).

4. Στον περιηγητή έργου, επιλέξτε τον κατάλογο έργου κορυφαίου επιπέδου και επιλέξτε τον στόχο NotificationContentExtension στο έργο από τη λίστα στόχων που δημιουργήθηκε στο βήμα αρ. 2.

5. Ορίστε το Στόχο Ανάπτυξης σε iOS 10 ή νεότερη έκδοση, η οποία είναι η έκδοση του iOS στην οποία η Apple κυκλοφόρησε την υποστήριξη για αυτήν την επέκταση. 

Αρχικοποίηση του SDK PushEngage για την Επέκταση Περιεχομένου Ειδοποίησης

Για να διασφαλίσετε τη σωστή λειτουργία του PushEngage SDK στην επέκταση Notification Content του iOS, πρέπει να ακολουθήσετε αυτά τα βήματα:

1. Ανοίξτε το Podfile που σχετίζεται με το έργο σας.

2. Προσθήκη Εξάρτησης, εισαγάγετε το παρακάτω απόσπασμα κώδικα στο 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 και προσθέστε τον απαραίτητο κώδικα αρχικοποίησης. Δείτε πώς μπορείτε να το κάνετε με μερικά παραδείγματα στοιχείων UI:

Χρησιμοποιώντας 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

Προσθήκη Ομάδων Εφαρμογών

Οι Ομάδες Εφαρμογών (App Groups) είναι απαραίτητες για την επικοινωνία μεταξύ της κύριας εφαρμογής, της επέκτασης υπηρεσίας ειδοποιήσεων και της επέκτασης περιεχομένου. Μπορείτε να ακολουθήσετε αυτά τα βήματα για να προσθέσετε Ομάδες Εφαρμογών στο έργο σας iOS:

Εάν έχετε μια υπάρχουσα ομάδα εφαρμογών και θέλετε να χρησιμοποιήσετε μόνο αυτήν, μεταβείτε στο βήμα αρ. 5.

1. Στο έργο σας Xcode, στον περιηγητή έργου, επιλέξτε τον κατάλογο έργου κορυφαίου επιπέδου και επιλέξτε τον κύριο στόχο της εφαρμογής.

2. Μεταβείτε στην καρτέλα "Signing & Capabilities".

3. Κάντε κλικ στο κουμπί "+ Capability" και επιλέξτε "App Groups" από τη λίστα.

4. Κάντε κλικ στο κουμπί + για να προσθέσετε μια Ομάδα Εφαρμογών. Δώστε ένα μοναδικό όνομα στην Ομάδα Εφαρμογών σας και κάντε κλικ στο OK.

5. Στην κύρια περιοχή επεξεργασίας, επιλέξτε τον κύριο στόχο της εφαρμογής σας και δημιουργήστε μια ομάδα εφαρμογών. Παρακαλώ δώστε το όνομα της ομάδας στο Info.plist της εφαρμογής σας με το κλειδί PushEngage_App_Group_Key.

6. Προσθέστε το ίδιο κλειδί και τιμή στο αρχείο Info.plist της Επέκτασης Υπηρεσίας Ειδοποιήσεων.

7. Επιλέξτε την ίδια ομάδα εφαρμογών στον Κύριο Στόχο Εφαρμογής και στην Επέκταση Υπηρεσίας Ειδοποιήσεων.

Βεβαιωθείτε ότι επιλέγετε την επέκταση υπηρεσίας ειδοποιήσεων στο παραπάνω βήμα.

Βαθιά Σύνδεση

Το deep linking επιτρέπει στους συνδρομητές σας να πλοηγούνται απευθείας σε μια συγκεκριμένη οθόνη εντός της εφαρμογής ή σε μια καθορισμένη ιστοσελίδα όταν αλληλεπιδρούν με ειδοποιήσεις push. Από προεπιλογή, εάν παρέχετε ένα έγκυρο URL, ο συνδρομητής θα ανακατευθυνθεί σε αυτήν την ιστοσελίδα.

Χειρισμός Web URLs:

  • Παρέχετε το PushEngageInAppEnabled στο YES στο Info.plist, και στη συνέχεια το URL θα φορτωθεί εντός της εφαρμογής χρησιμοποιώντας WKWebview.
  • Παρέχετε το PushEngageInAppEnabled στο NO στο Info.plist, εάν θέλετε ο συνδρομητής σας να ανακατευθυνθεί στο safari για να φορτώσει το URL. 
  • Παρέχετε το PushEngageAutoHandleDeeplinkURL στο YES στο Info.plist, και στη συνέχεια το SDK θα χειριστεί το deep link σύμφωνα με τη διαμόρφωση PushEngageInAppEnabled.
  • Παρέχετε το PushEngageAutoHandleDeeplinkURL στο NO στο Info.plist, και στη συνέχεια ο έλεγχος χειρισμού του deep link θα δοθεί στην εφαρμογή πελάτη από το SDK.
  • Εάν το deeplink δεν είναι έγκυρο URL, πρέπει να διαμορφώσετε την πλοήγηση χρησιμοποιώντας το setNotificationOpenHandler στο AppDelegate εντός της μεθόδου didFinishLaunchingWithOptions. Αυτό σας επιτρέπει να πλοηγηθείτε σε μια συγκεκριμένη οθόνη με βάση την παρεχόμενη συμβολοσειρά, όπως φαίνεται παρακάτω. Εάν δεν έχει διαμορφωθεί, το SDK απλώς θα ανοίξει την εφαρμογή.
ios-deeplink

Χρησιμοποιώντας 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

Αντιμετώπιση προβλημάτων

Επίλυση Ζητημάτων Δημιουργίας Σχετικών με το Sandboxing

Πρόβλημα:

Αντιμετωπίζετε προβλήματα δημιουργίας που σχετίζονται με το sandboxing.

Λύση:

  • Ανοίξτε το έργο σας στο Xcode.
  • Μεταβείτε στις Ρυθμίσεις Δημιουργίας.
  • Εντοπίστε την επιλογή User Script Sandboxing.
  • Ορίστε την σε Όχι.
Ζητήματα με τη Μέθοδο Swizzling στα SDK Firebase και PushEngage

Πρόβλημα:

Χρησιμοποιείτε τόσο το SDK Firebase όσο και το SDK PushEngage με τη μέθοδο swizzling ενεργοποιημένη και για τα δύο, και αυτό προκαλεί προβλήματα.

Λύση:

Απενεργοποιήστε τη μέθοδο swizzling για το SDK PushEngage και ακολουθήστε τα χειροκίνητα βήματα για τη διαχείριση των μεθόδων PushEngage. Μπορείτε να βρείτε λεπτομερείς οδηγίες στη διεύθυνση:
Τεκμηρίωση SDK iOS PushEngage

Αν θέλετε να εξερευνήσετε περισσότερες από τις δυνατότητες του SDK iOS, μπορείτε να ανατρέξετε στην αναλυτική μας τεκμηρίωση API.

Αν αντιμετωπίσετε οποιοδήποτε πρόβλημα, παρακαλούμε επικοινωνήστε μαζί μας κάνοντας κλικ εδώ. Η ομάδα υποστήριξής μας θα μπορέσει να σας βοηθήσει.

Τελευταία ενημέρωση στις 9 Μαρτίου 2026

Προσέλκυση και Διατήρηση Επισκεπτών Αφού Φύγουν από τον Ιστότοπό σας

Αυξήστε την αξία κάθε επίσκεψης στον ιστότοπο με Ειδοποιήσεις Push που είναι δύσκολο να αγνοηθούν.

  • Δωρεάν Πρόγραμμα για Πάντα
  • Εύκολη Εγκατάσταση
  • Υποστήριξη 5 Αστέρων