Handhabung von Push-Benachrichtigungen in iOS

improve this page | report issue

Übersicht

Sie können die MobileFirst-API für Benachrichtigungen verwenden, um Geräte zu registrieren und Geräteregistrierungen aufzuheben und um Tags zu abonnieren und Tagabonnements zu beenden. In diesem Lernprogramm werden Sie lernen, wie Push-Benachrichtigungen in iOS-Anwendungen mit Swift gehandhabt werden.

Informationen zu Benachrichtigungen im Hintergrund und interaktiven Benachrichtigungen finden Sie in folgenden Abschnitten:

Voraussetzungen:

Fahren Sie mit folgenden Abschnitten fort:

Benachrichtigungskonfiguration

Erstellen Sie ein Xcode-Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn das native MobileFirst-iOS-SDK noch nicht im Projekt enthalten ist, folgen Sie den Anweisungen im Lernprogramm SDK der Mobile Foundation zu iOS-Anwendungen hinzufügen.

Push-SDK hinzufügen

  1. Öffnen Sie die vorhandene podfile des Projekts und fügen Sie die folgenden Zeilen hinzu:

    use_frameworks!
    
    platform :ios, 8.0
    target "Xcode-project-target" do
         pod 'IBMMobileFirstPlatformFoundation'
         pod 'IBMMobileFirstPlatformFoundationPush'
    end
    
    post_install do |installer|
         workDir = Dir.pwd
    
         installer.pods_project.targets.each do |target|
             debugXcconfigFilename = "#{workDir}/Pods/Target Support Files/#{target}/#{target}.debug.xcconfig"
             xcconfig = File.read(debugXcconfigFilename)
             newXcconfig = xcconfig.gsub(/HEADER_SEARCH_PATHS = .*/, "HEADER_SEARCH_PATHS = ")
             File.open(debugXcconfigFilename, "w") { |file| file << newXcconfig }
    
             releaseXcconfigFilename = "#{workDir}/Pods/Target Support Files/#{target}/#{target}.release.xcconfig"
             xcconfig = File.read(releaseXcconfigFilename)
             newXcconfig = xcconfig.gsub(/HEADER_SEARCH_PATHS = .*/, "HEADER_SEARCH_PATHS = ")
             File.open(releaseXcconfigFilename, "w") { |file| file << newXcconfig }
         end
    end
    
    • Ersetzen Sie Xcode-project-target durch den Namen Ihres Xcode-Projektziels.
  2. Speichern Sie die podfile und schließen Sie sie.
  3. Navigieren Sie in einem Befehlszeilenfenster zum Stammverzeichnis des Projekts.
  4. Führen Sie den Befehl pod install aus.
  5. Öffnen Sie das Projekt über die Datei .xcworkspace.

API für Benachrichtigungen

MFPPush-Instanz

Alle API-Aufrufe müssen für eine Instanz von MFPPush ausgeführt werden. Zu diesem Zweck können Sie eine Variable (var) in einem Ansichtencontroller erstellen, z. B. var push = MFPPush.sharedInstance();, und dann im gesamten Ansichtencontroller push.methodName() aufrufen.

Alternativ dazu können Sie MFPPush.sharedInstance().methodName() für jede Instanz aufrufen, in der Sie auf die Push-API-Methoden zugreifen müssen.

Abfrage-Handler

Wenn der Bereich push.mobileclient einer Sicherheitsüberprüfung zugeordnet ist, müssen Sie sicherstellen, dass passende Abfrage-Handler registriert sind, bevor Push-APIs verwendet werden.

Weitere Informationen zu Abfrage-Handlern enthält das Lernprogramm Berechtigungsnachweise validieren.

Clientseite

Swift-Methoden Beschreibung
initialize() Initialisiert MFPPush für den angegebenen Kontext
isPushSupported() Unterstützt das Gerät Push-Benachrichtigungen?
registerDevice(completionHandler: ((WLResponse!, NSError!) -> Void)!) Registriert das Gerät beim Push-Benachrichtigungsservice
sendDeviceToken(deviceToken: NSData!) Sendet das Gerätetoken an den Server
getTags(completionHandler: ((WLResponse!, NSError!) -> Void)!) Ruft die verfügbaren Tags einer Instanz des Push-Benachrichtigungsservice ab
subscribe(tagsArray: [AnyObject], completionHandler: ((WLResponse!, NSError!) -> Void)!) Richtet das Geräteabonnement für die angegebenen Tags ein
getSubscriptions(completionHandler: ((WLResponse!, NSError!) -> Void)!) Ruft die derzeit vom Gerät abonnierten Tags ab
unsubscribe(tagsArray: [AnyObject], completionHandler: ((WLResponse!, NSError!) -> Void)!) Beendet das Abonnement bestimmter Tags
unregisterDevice(completionHandler: ((WLResponse!, NSError!) -> Void)!) Hebt die Registrierung des Geräts beim Push-Benachrichtigungsservice auf

Initialisierung

Die Initialisierung ist erforderlich, damit die Clientanwendung eine Verbindung zum Service MFPPush herstellen kann.

  • Die Methode initialize muss aufgerufen werden, bevor andere MFPPush-APIs verwendet werden.
  • Die Callback-Funktion wird für die Handhabung empfangener Push-Benachrichtigungen registriert.
MFPPush.sharedInstance().initialize();

Wird Push unterstützt?

Es wird überprüft, ob das Gerät Push-Benachrichtigungen unterstützt.

let isPushSupported: Bool = MFPPush.sharedInstance().isPushSupported()

if isPushSupported {
    // Push wird unterstützt.
} else {
    // Push wird nicht unterstützt.
}

Gerät registrieren und Gerätetoken senden

Registrieren Sie das Gerät beim Push-Benachrichtigungsservice.

MFPPush.sharedInstance().registerDevice(nil) { (response, error) -> Void in
    if error == nil {
        self.enableButtons()
        self.showAlert("Registered successfully")
        print(response?.description ?? "")
    } else {
        self.showAlert("Registrations failed.  Error \(error?.localizedDescription)")
        print(error?.localizedDescription ?? "")
    }
}
MFPPush.sharedInstance().sendDeviceToken(deviceToken)

Hinweis: Dieser Aufruf wird in der Regel im AppDelegate in der Methode didRegisterForRemoteNotificationsWithDeviceToken ausgeführt.

Tags abrufen

Rufen Sie alle verfügbaren Tags vom Push-Benachrichtigungsservice ab.

MFPPush.sharedInstance().getTags { (response, error) -> Void in
    if error == nil {
        print("The response is: \(response)")
        print("The response text is \(response?.responseText)")
        if response?.availableTags().isEmpty == true {
            self.tagsArray = []
            self.showAlert("There are no available tags")
        } else {
            self.tagsArray = response!.availableTags() as! [String]
            self.showAlert(String(describing: self.tagsArray))
            print("Tags response: \(response)")
        }
    } else {
        self.showAlert("Error \(error?.localizedDescription)")
        print("Error \(error?.localizedDescription)")
    }
}

Abonnement

Abonnieren Sie die gewünschten Tags.

var tagsArray: [String] = ["Tag 1", "Tag 2"]

MFPPush.sharedInstance().subscribe(self.tagsArray) { (response, error)  -> Void in
    if error == nil {
        self.showAlert("Subscribed successfully")
        print("Subscribed successfully response: \(response)")
    } else {
        self.showAlert("Failed to subscribe")
        print("Error \(error?.localizedDescription)")
    }
}

Abonnements abrufen

Rufen Sie die derzeit vom Gerät abonnierten Tags ab.

MFPPush.sharedInstance().getSubscriptions { (response, error) -> Void in
   if error == nil {
       var tags = [String]()
       let json = (response?.responseJSON)! as [AnyHashable: Any]
       let subscriptions = json["subscriptions"] as? [[String: AnyObject]]
       for tag in subscriptions! {
           if let tagName = tag["tagName"] as? String {
            print("tagName: \(tagName)")
               tags.append(tagName)
           }
       }
       self.showAlert(String(describing: tags))
   } else {
       self.showAlert("Error \(error?.localizedDescription)")
        print("Error \(error?.localizedDescription)")
    }
}

Abonnement beenden

Beenden Sie das Tagabonnement.

var tags: [String] = {"Tag 1", "Tag 2"};

// Tagabonnement beenden
MFPPush.sharedInstance().unsubscribe(self.tagsArray) { (response, error)  -> Void in
    if error == nil {
        self.showAlert("Unsubscribed successfully")
        print(String(describing: response?.description))
    } else {
        self.showAlert("Error \(error?.localizedDescription)")
       print("Error \(error?.localizedDescription)")
   }
}

Registrierung aufheben

Sie können die Registrierung des Geräts bei der Instanz des Push-Benachrichtigungsservice aufheben.

MFPPush.sharedInstance().unregisterDevice { (response, error)  -> Void in
   if error == nil {
       // Schaltflächen inaktivieren
       self.disableButtons()
       self.showAlert("Unregistered successfully")
       print("Subscribed successfully response: \(response)")
   } else {
       self.showAlert("Error \(error?.localizedDescription)")
       print("Error \(error?.localizedDescription)")
   }
}

Handhabung von Push-Benachrichtigungen

Push-Benachrichtigungen werden direkt vom nativen iOS-Framework behandelt. Welche Methoden vom iOS-Framework aufgerufen werden, richtet sich nach Ihrem Anwendungslebenszyklus.

Wenn beispielsweise eine einfache Benachrichtigung empfangen wird, währen die Anwendung aktiv ist, wird didReceiveRemoteNotification von AppDelegate ausgelöst.

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    print("Received Notification in didReceiveRemoteNotification \(userInfo)")
    // Alerttext anzeigen
      if let notification = userInfo["aps"] as? NSDictionary,
        let alert = notification["alert"] as? NSDictionary,
        let body = alert["body"] as? String {
            showAlert(body)
    }
}

Weitere Informationen zur Handhabung von Benachrichtigungen in iOS finden Sie in der Apple-Dokumentation.

Beispielanwendung

Beispielanwendung

Klicken Sie hier, um das Xcode-Projekt herunterzuladen.

Verwendung des Beispiels

Anweisungen finden Sie in der Datei README.md zum Beispiel.

Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.
Last modified on February 27, 2020